Here are the files you need to create:
app/code/local/Easylife/Provider/etc/config.xml - the extension config file
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Provider>
<version>0.0.1</version>
</Easylife_Provider>
</modules>
<global>
<models>
<provider>
<class>Easylife_Provider_Model</class>
</provider>
</models>
<resources>
<easylife_provider_setup>
<setup>
<module>Easylife_Provider</module>
<class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</easylife_provider_setup>
</resources>
</global>
</config>
app/code/local/Easylife/Provider/sql/easylife_provider_setup/mysql4-install-0.0.1.php - this will add an attribute named 'Provider' to your product
<?php
$this->startSetup();
//if you want to add the attribute to the category instead of the product change on the line below 'catalog_product' to 'catalog_category'
$this->addAttribute('catalog_product', 'provider', array(
'group' => 'General',
'type' => 'int',
'backend' => '',
'frontend_input' => '',
'frontend' => '',
'label' => 'Provider',
'input' => 'select',
'class' => '',
'source' => 'provider/attribute_source_provider',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,//can be SCOPE_WEBSITE or SCOPE_STORE
'visible' => true,
'used_in_product_listing' =>true,//can also be false
'frontend_class' => '',
'required' => false,//can be true
'user_defined' => true,
'default' => '',
'searchable' => false,//can be true
'filterable' => false,//can be true
'comparable' => false,//can be true
'visible_on_front' => false,//can be true
'unique' => false,
'position' => 60,//put any number here
));
$this->endSetup();
app/code/local/Easylife/Provider/Model/Attribute/Source/Provider.php - this is the source of you attribute
<?php
class Easylife_Provider_Model_Attribute_Source_Provider extends Mage_Eav_Model_Entity_Attribute_Source_Abstract{
protected $_options = null;
public function getAllOptions($withEmpty = false){
if (is_null($this->_options)){
$this->_options = array();
//$this->_options[] = array('label'=>'HERE GOES THE LABEL', 'value'=>'HERE GOES THE VALUE');
//as example
$this->_options[] = array('label'=> $this->__('Provider 1'), value=>1);
$this->_options[] = array('label'=> $this->__('Provider 2'), value=>2);
$this->_options[] = array('label'=> $this->__('Provider 3'), value=>3);
}
$options = $this->_options;
if ($withEmpty) {
array_unshift($options, array('value'=>'', 'label'=>''));
}
return $options;
}
public function getOptionText($value)
{
$options = $this->getAllOptions(false);
foreach ($options as $item) {
if ($item['value'] == $value) {
return $item['label'];
}
}
return false;
}
public function getFlatColums()
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$column = array(
'unsigned' => false,
'default' => null,
'extra' => null
);
if (Mage::helper('core')->useDbCompatibleMode()) {
$column['type'] = 'int(10)';
$column['is_null'] = true;
} else {
$column['type'] = Varien_Db_Ddl_Table::TYPE_SMALLINT;
$column['length'] = 10;
$column['nullable'] = true;
$column['comment'] = $attributeCode . ' column';
}
return array($attributeCode => $column);
}
public function getFlatUpdateSelect($store)
{
return Mage::getResourceModel('eav/entity_attribute')
->getFlatUpdateSelect($this->getAttribute(), $store);
}
}
app/etc/modules/Easylife_Provider.xml - the module declaration
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Provider>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
</depends>
</Easylife_Provider>
</modules>
</config>
That's it. Clear the cache and try again. If you choose to include the attribute in the product listing or if you made it filtrable
'used_in_product_listing' =>true, ... 'filterable' => falsethen you need to rebuild your indexes. Now if you need to get all the products that belong to 'Provider 1' all you need to do is this:
$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToFilter('provider', 1);
Enjoy,
Marius.