2013-03-02 27 views
1

因爲我花了很多時間試圖找出Magento具有靜態屬性的奇怪行爲。Magento:將靜態屬性添加到catalog_product,但無法確保將值保存到它

過了一會兒,我發現了一個堅實的方式來安裝腳本

$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,併發生了同樣的奇怪行爲......在許多調試,檢查,咖啡......它突然也起作用。

對於所有的下一個測試用例與測試屬性barfoobararghgrmph ......究竟發生了一遍又一遍相同。

好吧,讓我們將安裝腳本推送到另一個Magento安裝,並...?! ......是的,同樣的OO

這樣,我不能確保我的設置腳本執行,它的意思:-(

信息:我需要的靜態屬性,以避免同時找到其他不必要的連接產品具有相同屬性(顏色代碼)值,靜態屬性,每一個集合中基本上可以不增加特殊屬性的集合。

回答

2

了... ...

只是需要加入

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

設置腳本末尾