我正在使用Magento Community 1.9.0.0。
我已经以编程方式创建了一个自定义类别属性,这是一个多选。该属性可以在我的管理类别部分中看到。当我选择任何值时 - 无论是一个还是多个并按保存,我都会收到成功保存的消息,但值永远不会保存。
然后我还尝试了一个创建类别属性的扩展。这有同样的问题。当我联系支持他们说
类别实体不支持多重选择,因此此类属性不适用于类别。
这是真的吗?多选不适用于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 :(得分:1)
@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;
}
答案 1 :(得分:0)
所以这个问题有点老了,但是我觉得迟到总比没有好。
类别可以通过多项选择精彩地工作,你只需要帮助它们。多重选择作为数组发送到类别实体,它无法处理,这意味着您最终会得到一个空的多选。你想要做的是将id合并为一个字符串。使用javascript,或者像我一样,使用观察者。
我的multiselect属性称为category_limit
。
这是config.xml
<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())
);
}
}