我在Magento制作了我的模块,但它需要为所有产品分配额外的属性。我制作了安装脚本,但它不起作用:
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
INSERT IGNORE INTO `{$installer->getTable('eav/attribute')}` (`attribute_id`, `entity_type_id`, `attribute_code`, `attribute_model`, `backend_model`, `backend_type`, `backend_table`, `frontend_model`, `frontend_input`, `frontend_label`, `frontend_class`, `source_model`, `is_required`, `is_user_defined`, `default_value`, `is_unique`, `note`) VALUES
SELECT 1 + coalesce((SELECT max(attribute_id) FROM `{$installer->getTable('eav/attribute')}`),0),4,`is_accepted`,NULL,NULL,`int`,NULL,NULL,`boolean`,`Accepted`,NULL,`eav/entity_attribute_source_boolean`,1,1,'0',0,NULL);
");
$installer->endSetup();
Config.xml文件:
<adminhtml>
<acl>
<module_setup>
<setup>
<module>My_module</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</module_setup>
<module_write>
<connection>
<use>core_write</use>
</connection>
</module_write>
<module_read>
<connection>
<use>core_read</use>
</connection>
</module_read>
</resources>
</acl>
</adminhtml>
这里有什么问题?
答案 0 :(得分:6)
首先,这不是有效的config.xml。 setup类配置如下:
<config>
...
<global>
...
<resources>
...
<your_module_setup>
<setup>
<module>Your_Module</module>
<class>Mage_Eav_Model_Entity_Setup</class>
</setup>
</your_module_setup>
...
</resources>
...
</global>
...
</config>
而不是Mage_Eav_Model_Entity_Setup您也可以使用自己的安装类,但它应该继承Mage_Eav_Model_Entity_Setup,因此您可以使用addAttribute而不是手工伪造SQL查询。
然后您的设置脚本应该与此类似:
$installer = $this;
$installer->startSetup();
/*
* adds product unit attribute to product
*/
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'productunit_id', array(
'label' => Mage::helper('productunits')->__('Quantity Unit'),
'type' => 'int',
'input' => 'select',
'source' => SGH_ProductUnits_Model_Entity_Attribute_Source_Units::MODEL,
'backend' => SGH_ProductUnits_Model_Entity_Attribute_Backend_Units::MODEL,
'required' => 1,
'global' => 1,
'note' => Mage::helper('productunits')->__('This will be displayed next to any Qty value.')
));
$installer->endSetup();
这是我的代码添加了一个数量单位属性,不要被类常量的使用混淆,那些只是对应的类别名。
答案 1 :(得分:3)
您的<module_setup>
节点必须位于config/global/resources
下,而不是config/adminhtml/acl
下。