我想为Magento的EAV属性模型添加一个新属性。这可能吗?
我知道Magento允许您使用静态字段(在实体表上)扩展模型,但我想在EAV属性表本身添加一个新字段(对于目录产品属性)。新属性将是一个新设置,类似于“在类别列表中可见”。
答案 0 :(得分:12)
要为产品属性添加新设置,您可以创建一个扩展(1)将新列添加到catalog / eav_attribute表,(2)使用属性编辑页面中的新设置放入字段观察员。
为您的扩展程序创建一个SQL脚本,然后添加新列。我建议使用catalog / eav_attribute表,但你也可以使用eav_attribute:
$installer = $this;
$installer->startSetup();
$table = $installer->getTable('catalog/eav_attribute');
$installer->getConnection()->addColumn(
$table,
'is_visible_in_category_list',
"TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0'"
);
$installer->getConnection()->addKey(
$table,
'IDX_VISIBLE_IN_CATEGORY_LIST',
'is_visible_in_category_list'
);
$installer->endSetup();
在这里,我还添加了一个快速查询的索引。
准备属性编辑表单时会触发一个事件,所以让我们观察它:
<events>
<adminhtml_catalog_product_attribute_edit_prepare_form>
<observers>
<is_visible_in_category_list_observer>
<class>mymodule/observer</class>
<method>addVisibleInCategoryListAttributeField</method>
</is_visible_in_category_list_observer>
</observers>
</adminhtml_catalog_product_attribute_edit_prepare_form>
</events>
然后,在观察者中添加新字段:
public function addVisibleInCategoryListAttributeField($observer)
{
$fieldset = $observer->getForm()->getElement('base_fieldset');
$attribute = $observer->getAttribute();
$fieldset->addField('is_visible_in_category_list', 'select', array(
'name' => 'is_visible_in_category_list',
'label' => Mage::helper('mymodule')->__('Visible in Category List'),
'title' => Mage::helper('mymodule')->__('Visible in Category List'),
'values' => Mage::getModel('adminhtml/system_config_source_yesno')->toOptionArray(),
));
}
这就是全部。自动处理从编辑页面保存设置,因为表单中的字段名称与数据库字段名称匹配。