1

很多小时以来,我试图找出具有静态属性的 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

这样我就不能确保我的安装脚本能做到,它的意思是:-(

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

4

1 回答 1

2

知道了...

只需要添加

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

在安装脚本的最后

于 2013-03-02T16:28:34.450 回答