So setzen Sie den ausgewählten Wert im Multiselect -Attribut fest
-
16-10-2019 - |
Frage
So setzen Sie den ausgewählten Wert im Multiselect -Attribut progmatisch fest. Ich habe es versucht, aber es funktioniert nicht für mich.
So setzen Sie das Multi-Select-Attribut eines Produkts programmgesteuert nach Beschriftungen
Der Code auf dem obigen Link hört nicht zum Laden ab
$productObj = Mage::getModel('catalog/product')->load($product->getId());
$productObj->setData('filter_category','51,52');
$productObj->save();
Der obige Code wird danach aufgerufen catalog_product_save_after
Lösung
Da möchten Sie dies in der Aktion tun catalog_product_save_after
Sie können das individuelle Produktattribut und nicht das vollständige Produkt einfach aktualisieren, wodurch das Problem der Infinite Loop gestoppt wird.
$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);
Andere Tipps
Wie andere erwähnt haben, ist das Problem, dass Sie in eine unendliche Schleife gehen, wenn Sie das Produkt erneut in der speichern save_after
Veranstaltung.
- Sie sollten die verwenden
save_before
Veranstaltung - Nicht
load()
das Produkt wieder,$product
Enthält bereits alle Daten - Nicht
save()
als die Daten, die Sie festgelegt haben$product
wird gerettet, nachdem die Veranstaltung beendet ist
Der Code für Ihren neuen Beobachter sieht also so aus:
public function setFilterCategoryBeforeSave(Varien_Event_Observer $observer)
{
$observer->getProduct()->setData('filter_category','51,52');
}
Das ist alles.
Sie können mehrere SELECT -FINSET mit Finset filtern. Unten finden Sie ein kleines Beispiel dafür, wie Filtern es filtern
$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);
Hier ist $ Selection der Wert des zu filternen Multiple -Select -Attributs