如何在MultiSelect属性中设置选定的值
-
16-10-2019 - |
题
如何以过程中的多选择属性设置选定的值。我尝试了这个,但对我不起作用。
上面链接上的代码不会停止加载
$productObj = Mage::getModel('catalog/product')->load($product->getId());
$productObj->setData('filter_category','51,52');
$productObj->save();
上面的代码在此之后调用 catalog_product_save_after
解决方案
由于您想在动作中这样做 catalog_product_save_after
您可以简单地更新单个产品属性,而不是完整的产品,从而阻止无限环路问题。
$attrCode = 'your_attribute';
$sourceModel = Mage::getModel('catalog/product')->getResource()
->getAttribute($attrCode)->getSource();
$valuesText = explode(',', 'red,green,blue');
$valuesIds = array_map(array($sourceModel, 'getOptionId'), $valuesText);
$product->setData($attrCode, $valuesIds);
$product->getResource()->saveAttribute($product, $attrCode);
其他提示
正如其他人提到的那样,问题在于,如果您再次将产品保存在 save_after
事件。
- 你应该使用
save_before
事件 - 别
load()
再次产品,$product
已经包含所有数据 - 别
save()
作为您设置的数据$product
活动结束后将保存
因此,您的新观察者的代码看起来像这样:
public function setFilterCategoryBeforeSave(Varien_Event_Observer $observer)
{
$observer->getProduct()->setData('filter_category','51,52');
}
就这样。
您可以使用FinSet过滤多个选择。下面是如何过滤的一个小例子
$collection = $this->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
->addAttributeToFilter($attribute,array('finset'=>array_search($selection,$valueId)))
->setPageSize($limit)
->load();
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
这里$选择是要过滤的多个选择属性的值