Quick Reference Guide for creating new attributes via an installer script for EAV and flat table entity types.
Additional Resources:
Quick Reference Guide for creating new attributes via an installer script for EAV and flat table entity types.
Additional Resources:
| <?php | |
| /** | |
| * Flat tables entity types will most likely not automatically render | |
| * your new table column within the admin form for the entity. If | |
| * you would like an admin form to be created for them reference this: | |
| * @see https://gist.github.com/dfelton/8ca84c94ee0b57e346a3e7469d814214#file-200-form_fileds.php | |
| */ | |
| // IMPORTANT: Magento heavily caches the table descrptions. After | |
| // creating your new columns you will probably have to blow out the | |
| // "var/cache" directory before Magento will recognize that the new | |
| // column exists. | |
| // This file should be located here, replace the capital words with appropriate values: | |
| // FILE: app/code/CODE_POOL/MODULE_NAMESPACE/MODULE_NAME/sql/IDENTIFIER/upgrade-OLD_VERSION-NEW_VERSION.php | |
| // To have this file run, update the <version> of your extension in | |
| // your extensions 'etc/config.xml' file (if caching is turned on | |
| // you'll need to flush the CONFIG cache type). | |
| // Most all setup models, regardless of your extension, probably extend this class already. | |
| /* @var $this Mage_Core_Model_Resource_Setup */ | |
| $this->startSetup(); | |
| // Next, copy/paste individual pieces from below for the fields you need. | |
| // Make sure to remember to include $this->endSetup() at the end of your file. | |
| // Below, whenever $this->getTable('IDENTIFIER/ENTITY') is referenced, | |
| // it should be replaced with the same string used to fetch the model | |
| // you are looking to modify the table for. For example, to add | |
| // to the table used for Mage::getModel('cms/page'), we'd replace | |
| // $this->getTable('IDENTIFIER/ENTITY') with $this->getTable('cms/page'). | |
| // Add INTEGER column | |
| // Appropriate for: | |
| // - Relational column with other entities | |
| // - YES/NO select dropdowns | |
| // - single value select dropdowns (which store integer values) | |
| // - sort_order field | |
| $this | |
| ->getConnection() | |
| ->addColumn( | |
| $this->getTable('IDENTIFIER/ENTITY'), // <!-- Change this | |
| 'attribute_code', // <!-- Change This | |
| array( | |
| 'type' => Varien_Db_Ddl_Table::TYPE_INTEGER, | |
| 'length' => 11, // <!-- Change if appropriate, for YES/NO "1" would be better | |
| 'nullable' => true, // <!-- Change if desired | |
| 'default' => null, | |
| 'comment' => 'Comment' // <!-- Change this (use your planned label value) | |
| ) | |
| ) | |
| ; | |
| // VARCHAR | |
| // Appropriate for: | |
| // - input type: text | |
| // - single values select dropdowns (which store strings values over integers) | |
| // - multi-select dropdowns (store values as CSV) | |
| // - image fields | |
| $this | |
| ->getConnection() | |
| ->addColumn( | |
| $this->getTable('IDENTIFIER/ENTITY'), // <!-- Change this | |
| 'attribute_code', // <!-- Change this | |
| array( | |
| 'type' => Varien_Db_Ddl_Table::TYPE_TEXT, | |
| 'length' => '255', // <!-- 255 is max for varchar. Higher value will automatically create TEXT column type. | |
| 'nullable' => true, // <!-- Change if desired | |
| 'default' => null, // <!-- Change if desired | |
| 'comment' => 'Comment' // <!-- Change this (use your planned label value) | |
| ) | |
| ) | |
| ; | |
| $this->endSetup(); |
| <?php | |
| // TODO: start this |
| <?php | |
| // This file should be located here, replace the capital words with appropriate values: | |
| // FILE: app/code/CODE_POOL/MODULE_NAMESPACE/MODULE_NAME/sql/IDENTIFIER/upgrade-OLD_VERSION-NEW_VERSION.php | |
| // To have this file run, update the <version> of your extension in your extensions 'etc/config.xml' file. | |
| // If your installer script is already an instance of Mage_Catalog_Model_Resource_Setup | |
| // you can simply use "$this" in replacement of "$setup" | |
| /* @var $setup Mage_Catalog_Model_Resource_Setup */ | |
| $setup = Mage::getModel('catalog/resource_setup', 'core_setup'); | |
| // Type: Image | |
| $setup->addAttribute( | |
| Mage_Catalog_Model_Category::ENTITY, | |
| 'attribute_code', // <!-- Change this | |
| array( | |
| 'type' => 'varchar', | |
| 'label' => 'Attribute Label', // <!-- Change this | |
| 'input' => 'image', | |
| 'backend' => 'catalog/category_attribute_backend_image', | |
| 'required' => false, // <!-- Need to confirm but I don't think it's possible to make image fields required anyway. Default is true though so supplying here for clarity | |
| 'sort_order' => 100, // <!-- Change this if desired | |
| 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, | |
| 'group' => 'General Information', // If a new tab is specified that tab will be created automatically | |
| ) | |
| ); | |
| // Type: Yes/No | |
| $setup->addAttribute( | |
| Mage_Catalog_Model_Category::ENTITY, | |
| 'attribute_code', // <!-- Change This | |
| array( | |
| 'input' => 'select', | |
| 'type' => 'int', | |
| 'source' => 'eav/entity_attribute_source_boolean', | |
| 'label' => 'Attribute Label', // <!-- Change this | |
| 'required' => 0, | |
| 'sort_order' => 100, // <!-- Change this if desired | |
| 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, | |
| 'group' => 'General Information', // If a new tab is specified that tab will be created automatically | |
| ) | |
| ); | |
| // Type: Select Dropdown | |
| $setup->addAttribute( | |
| Mage_Catalog_Model_Category::ENTITY, | |
| 'attribute_code', // <!-- Change This | |
| array( | |
| 'input' => 'select', | |
| 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, | |
| 'group' => 'General Information', // <!-- Change if desired | |
| 'label' => 'Attribute Label', // <!-- Change this | |
| 'sort_order' => 100, // <!-- Change if desired | |
| // @see https://gist.github.com/dfelton/8ca84c94ee0b57e346a3e7469d814214#file-300-select-php | |
| // Should ideally rename the class name to reflect the attribute code it serves. | |
| 'source' => 'firstscribe_moduleName/attribute_source_type_select', | |
| ) | |
| ); | |
| // Type: WYSIWYG | |
| $setup->addAttribute( | |
| Mage_Catalog_Model_Category::ENTITY, | |
| 'attribute_code', // <!-- Change this | |
| array( | |
| 'input' => 'textarea', | |
| 'type' => 'text', | |
| 'label' => 'Attribute Label', // <!-- Change this | |
| 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, | |
| 'group' => 'General Information', // <!-- Change this if desired | |
| 'sort_order' => null, // <!-- Change this if desired | |
| 'required' => false, // <!-- Change this if desired | |
| 'wysiwyg_enabled' => true, | |
| 'visible_on_front' => true, | |
| 'is_html_allowed_on_front' => true, | |
| ) | |
| ); | |
| // Default Configuration Option Values | |
| /** @see Mage_Catalog_Model_Resource_Setup::_prepareValues */ | |
| /** @see Mage_Eav_Model_Entity_Setup::_prepareValues */ | |
| // Attribute which only apply to products have been ommitted | |
| $defaultOptions = array( | |
| 'backend' => null, | |
| 'default' => null, | |
| 'frontend' => null, | |
| 'frontend_class' => null, | |
| 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, // STORE = 0; GLOBAL = 1; WEBSITE = 2 | |
| 'input' => 'text', // button|checkbox|checkboxes|collection|column|date|editor|fieldset|file|gallery|hidden|image|imagefile|label|link|multiline|multiselect|note|obsure|password|radio|radios|reset|select|submit|text|textarea|time | |
| 'input_renderer' => null, | |
| 'is_html_allowed_on_front' => 0, | |
| 'label' => null, | |
| 'note' => null, | |
| 'position' => 0, | |
| 'required' => 1, // 1|0 | |
| 'source' => null, | |
| 'table' => null, | |
| 'type' => 'varchar', // datetime|decimal|int|text|varchar | |
| 'unique' => 0, | |
| 'visible' => 1, // TODO: Does this really apply to categories or only products? | |
| 'visible_on_front' => 0, // TODO: Does this really apply to categories or only products? | |
| 'wysiwyg_enabled' => 0, | |
| ); |
| <?php | |
| $this->startSetup(); | |
| /* @var $setup Mage_Catalog_Model_Resource_Setup */ | |
| /* @var $category Mage_Catalog_Model_Category */ | |
| $setup = Mage::getModel('catalog/resource_setup', 'core_setup'); | |
| $category = Mage::getModel('catalog/category'); | |
| $setId = $category->getDefaultAttributeSetId(); | |
| $setup->addAttributeGroup(Mage_Catalog_Model_Category::ENTITY, $setId, 'Meta Information', 25); | |
| $groupId = $setup->getAttributeGroupId(Mage_Catalog_Model_Category::ENTITY, $setId, 'Meta Information'); | |
| foreach (array('meta_title','meta_keywords','meta_description') as $attributeCode) { | |
| $setup->addAttributeToGroup(Mage_Catalog_Model_Category::ENTITY, $setId, $groupId, $attributeCode); | |
| } | |
| $this->endSetup(); |
| <?php | |
| // IMPORTANT: This file may already exist if it is part of your own extension. | |
| // If this is the case, just add to your _prepareForm() method. | |
| // If this is for another module's entity type, you may have to do the extra work | |
| // to create your own tab. | |
| // This file should be located here, replace the capital words with appropriate values | |
| // FILE: app/code/CODE_POOL/MODULE_NAMESPACE/MODULE_NAME/Model/Attribute/Source/Type/SELECT.php | |
| /** | |
| * Reference list for adding new form fields to an exiting | |
| * entity's attribute. | |
| */ | |
| // Find/Replace: | |
| // ModuleName | |
| // EntityName | |
| // TabName | |
| class FirstScribe_ModuleName_Block_Adminhtml_EntityName_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form | |
| { | |
| public function _prepareForm() | |
| { | |
| // ... AFTER $fieldset = $form->addFieldSet(/* ... params */); | |
| // Select Dropdown | |
| $fieldset->addField( | |
| 'attribute_code', // <!-- Change this | |
| 'select', | |
| array( | |
| 'label' => Mage::helper('identifier')->__('Label'), // <!-- Change this and "identifier" | |
| 'name' => 'attribute_code', // <!-- Change this | |
| 'required' => false, // <!-- Change if desired | |
| // @see https://gist.github.com/dfelton/8ca84c94ee0b57e346a3e7469d814214#file-300-select-php | |
| // change to reflect your class name | |
| 'values' => Mage::getSingleton('identifier/attribute_source_type_select')->toOptionArray(), | |
| ) | |
| ); | |
| // .. BEFORE $form->setValues($formValues); | |
| } | |
| } |
| <?php | |
| // This file should be located here, replace the capital words with appropriate values | |
| // FILE: app/code/CODE_POOL/MODULE_NAMESPACE/MODULE_NAME/Model/Attribute/Source/Type/SELECT.php | |
| // Also consider renaming the class itself, instead of ending with "Select" use the attribute code or something. | |
| // When doing so remember to rename the class below | |
| // Modify the contents of getOptions(), rename class to accurate value. | |
| /** | |
| * Example attribute source for custom select attribute added to an entity. | |
| * | |
| * @category FirstScribe | |
| * @package FirstScribe_ModuleName | |
| */ | |
| class FirstScribe_ModuleName_Model_Attribute_Source_Type_Select extends Mage_Eav_Model_Entity_Attribute_Source_Abstract | |
| { | |
| public function getAllOptions() | |
| { | |
| if (is_null($this->_options)) { | |
| // Modify the below logic to meet your extension's needs | |
| $this->_options = array( | |
| array( | |
| 'label' => Mage::helper('firstscribe_moduleName')->__('Option 1'), | |
| 'value' => 'option-1', | |
| ), | |
| array( | |
| 'label' => Mage::helper('firstscribe_moduleName')->__('Option 2'), | |
| 'value' => 'option-2' | |
| ), | |
| ); | |
| } | |
| return $this->_options; | |
| } | |
| public function toOptionArray() | |
| { | |
| return $this->getAllOptions(); | |
| } | |
| } |