很多小时以来,我试图找出具有静态属性的 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 类以找到它突然工作的原因之后,无需更改代码中的任何内容。在调试时,我经常重置我的模块并删除和读取属性,还清除缓存并重新索引目录。现在它可以完美运行,即使该属性被一次又一次地删除和读取 oO
为了理解发生了什么,我尝试了一个新的属性foo
,并且发生了同样的奇怪行为……经过多次调试、检查、咖啡……它也突然起作用了。
对于所有具有测试属性的下一个测试用例bar
,, foobar
, argh
, grmph
... 一次又一次地发生完全相同的情况。
好的,让我们将安装脚本推送到另一个 Magento 安装,然后...?!...是的,同样的oO
这样我就不能确保我的安装脚本能做到,它的意思是:-(
信息:我需要静态属性以避免不必要的连接,同时查找具有相同属性(颜色代码)值的其他产品。静态属性基本上在每个集合中都可用,而无需向集合添加特殊属性。