如何以过程中的多选择属性设置选定的值。我尝试了这个,但对我不起作用。

如何通过标签编程设置产品的多选择属性

上面链接上的代码不会停止加载

$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 事件。

  1. 你应该使用 save_before 事件
  2. load() 再次产品, $product 已经包含所有数据
  3. 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); 

这里$选择是要过滤的多个选择属性的值

许可以下: CC-BY-SA归因
scroll top