Вопрос

Как установить выбранное значение в атрибуте Multielect Attruity. Я попробовал это, но это не работает для меня.

Как программно установить многоцелевой атрибут продукта на этикетках

Код по ссылке выше не перестает загружать

$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); 

Здесь $ Selection - это значение множественного атрибута SELECT для фильтрации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top