Magento:向catalog_product添加静态属性,但无法确保为其保存值

时间:2013-03-02 13:58:46

标签: magento magento-1.7

我花了好几个小时试图找出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的所有下一个测试用例,foobararghgrmph ...反复发生的情况完全一样。

好的,我们将设置脚本推送到另一个Magento安装,然后......?! ......是的,同样的o.O

这样我无法确保我的设置脚本能够做到这一点,它意味着什么: - (

信息:在查找具有相同属性(颜色代码)值的其他产品时,我需要静态属性以避免不必要的连接。静态属性a在每个集合中基本可用,而不向集合添加特殊属性。

1 个答案:

答案 0 :(得分:2)

得到它......

只需要添加

$installer->getConnection()->resetDdlCache();

在安装脚本的末尾