2014-12-19 78 views
0

我正在使用Magento Community 1.9.0.0。Magento - 多選擇類別屬性不保存

我已經以編程方式創建了一個多選的自定義分類屬性。該屬性可以在我的管理員類別部分中看到。當我選擇任何值 - 無論是一個或多個,並按保存我得到一個成功的保存消息,但值永遠不會保存。

然後,我也試着創建類別屬性的擴展。這有同樣的問題。當我聯繫支持時,他們說

類別實體不支持多選,因此這種類型的屬性不適用於類別。

這是真的嗎? CE-1.9上的多選不能用於類別屬性?

這裏是我使用編程創建它的代碼:

require_once('app/Mage.php'); 
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID)); 
$installer = new Mage_Sales_Model_Mysql4_Setup; 
$attribute = array(
    'type' => 'text', 
    'label'=> 'Room Type', 
    'input' => 'multiselect', 
    'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 
    'visible' => true, 
    'required' => false, 
    'user_defined' => true, 
    'default' => "", 
    'group' => "General Information", 
    'option' => array ( 
     'value' => array(
      'kitchen' => array('Kitchen'), 
      'bedroom' => array('Bedroom'), 
      'bathroom' => array('Bathroom'), 
      'loft' => array('Loft'), 
      'basement' => array('Basement'), 
      'lounge' => array('Lounge') 
     ) 
    ) 

); 
$installer->addAttribute('catalog_category', 'room_type', $attribute); 
$installer->endSetup(); 
+0

Multiselect應該可以使用類別屬性。 請按照本教程。這是爲textarea,但你可以以類似的方式爲下拉菜單創建一個。 http://www.atwix.com/magento/add-category-attribute/ – Harit 2014-12-19 10:54:54

+0

你知道爲什麼它可能沒有保存的任何理由嗎? – 2014-12-19 10:55:51

+0

您是否創建了源模型?在這裏發佈你的代碼。 – Harit 2014-12-19 10:56:22

回答

0

所以這個問題是有點老了,但我想遲到總比不到好。

類別可以與多個選擇出色地工作,你只需要幫助他們一點點。多選被作爲一個數組發送到類別實體,它不能處理,這意味着你最終會得到一個空的多選。你想要做的是將ID合併成一個字符串。要麼使用JavaScript,要麼像我一樣,使用觀察者。我的多重屬性名爲category_limit

這正好在​​3210

<events> 
    <catalog_category_prepare_save> 
     <observers> 
      <rianorie_categorylimit_save> 
       <class>rianorie_categorylimit/observer</class> 
       <method>adjustCategory</method> 
      </rianorie_categorylimit_save> 
     </observers> 
    </catalog_category_prepare_save> 
</events> 

,這是實際的觀察者做的工作:

class RianOrie_CategoryLimit_Model_Observer 
{ 
    public function adjustCategory(Varien_Event_Observer $observer) 
    { 
     $event = $observer->getEvent(); 
     $category = $event->getCategory(); 
     $category->setCategoryLimit(
       implode(',', $category->getCategoryLimit()) 
     ); 
    } 
} 
0

@Rian是正確的,多選值作爲數組發送的,其可以不會被處理。但是,我們不必使用觀察者。相反,我們應該爲該屬性添加後端模型。 創建它時,將以下行添加到屬性數據數組中。

'backend' => 'your_module/category_attribute_backend_related', 

在你的後端模式(Your_Module_Model_Category_Attribute_Backend_Related),你應該具備以下功能,幫助選定的選項保存或正確裝入。

public function beforeSave($object) { 
    $attributeCode = $this->getAttribute()->getName(); 
    if ($attributeCode == 'room_type') { 
     $data = $object->getData($attributeCode); 
     if (!is_array($data)) { 
      $data = array(); 
     } 
     $object->setData($attributeCode, join(',', $data)); 
    } 
    if (is_null($object->getData($attributeCode))) { 
     $object->setData($attributeCode, false); 
    } 
    return $this; 
} 

public function afterLoad($object) { 
    $attributeCode = $this->getAttribute()->getName(); 
    if ($attributeCode == 'room_type') { 
     $data = $object->getData($attributeCode); 
     if ($data) { 
      $object->setData($attributeCode, explode(',', $data)); 
     } 
    } 
    return $this; 
}