我花了好几个小时试图找出Magento带有静态属性的奇怪行为。
过了一段时间,我找到了一种在设置脚本中添加静态属性的可靠方法
$installer = $this;
$setup = Mage::getModel( 'eav/entity_setup', 'core_setup' );
$installer->startSetup();
// adding the color code attribute as static attribute
$setup->addAttribute( 'catalog_product', 'color_code', array(
'group' => 'General',
'label' => 'Color Code',
'note' => 'the color code',
'type' => 'static',
'input' => 'text',
'backend' => 'eav/entity_attribute_backend_default',
'source' => '',
'frontend' => '',
'required' => false,
'filterable' => true,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL
) );
$installer->getConnection()->addColumn(
$installer->getTable( 'catalog/product' ),
'color_code',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'length' => 64,
'comment' => 'Color Code'
)
);
$installer->endSetup();
我要先说的第一件事:我必须自己将列添加到实体表中......好吧。 给定的脚本允许我在管理员后端输入正确的输入,如果指定列中有值,它将出现在管理员后端的相应输入字段中......这很好: - )
现在......伟大的谜团: - (
如果我尝试将值保存到新属性,则它不起作用。那不完全正确。一开始它不保留新值。在将整个Magento调试到Varien和Zend类之后,找到它突然工作的原因,而不更改代码中的任何内容。在调试时我经常重置我的模块并删除并读取属性,并清除缓存并重新编制目录索引。现在它工作得很完美,即使该属性被删除并一次又一次地重读o.O
为了理解发生了什么,我尝试了一个新的属性foo
,并且发生了同样奇怪的行为......经过许多调试,检查,喝咖啡......它突然也起作用了。
对于测试属性为bar
的所有下一个测试用例,foobar
,argh
,grmph
...反复发生的情况完全一样。
好的,我们将设置脚本推送到另一个Magento安装,然后......?! ......是的,同样的o.O
这样我无法确保我的设置脚本能够做到这一点,它意味着什么: - (
信息:在查找具有相同属性(颜色代码)值的其他产品时,我需要静态属性以避免不必要的连接。静态属性a在每个集合中基本可用,而不向集合添加特殊属性。
答案 0 :(得分:2)
得到它......
只需要添加
$installer->getConnection()->resetDdlCache();
在安装脚本的末尾