Erstellte ein benutzerdefiniertes Attribut über Setup, es erscheint jedoch nur neue Produkte
-
16-10-2019 - |
Frage
Hallo, ich habe den nächsten Setup -Code:
$installer = new Mage_Catalog_Model_Resource_Setup('core_setup');
$installer->addAttribute('catalog_product', 'shipping_city', array(
'group' => 'General',
'type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
'backend' => '',
'frontend' => '',
'label' => 'Envio p/ Cidade',
'input' => 'text',
'class' => '',
'source' => '',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'visible' => false,
'required' => false,
'user_defined' => true,
'default' => '',
'searchable' => true,
'filterable' => true,
'comparable' => false,
'visible_on_front' => true,
'unique' => false,
'apply_to' => 'simple,configurable,virtual',
'is_configurable' => false ));
$installer->endSetup();
Dann debugge ich die Produkte mit DE "und" Event:
$product = $observer->getEvent()->getProduct();
Zend_Debug::dump($product->debug());die;
Das Problem ist, dass wenn ich versuche, ein bereits vorhandenes Produkt zu speichern, das Ereignis erhält und mein Debuggen nicht mein Attribut Shipping_City bringt. In einem neuen Produkt erscheint es in meinem Debuggen, aber nur bei de Save_after, in der SARE_BEFORE erscheint nicht auch ...
Irgendwelche Gedanken Jungs?
Lösung
Wenn Sie ein neues Attribut hinzufügen und es dem Attributsatz hinzugefügt wurde, in dem Sie es möchten, lief alles gut mit $installer->addAttribute
.
Das Problem ist, dass es aufgrund der EAV keinen Wert für Ihr neues Attribut gibt. Dies bedeutet, dass das Abfragen und Filterung durch Null filtern und wenn Sie anrufen $product->getNewAttribute()
du bekommst einfach NULL
.
Aber dieses Verhalten ist korrekt und beabsichtigt.
Sie können dies beheben, indem Sie ein kleines Skript schreiben und einen Standardwert für alle Produkte wie folgt einstellen:
$collection = Mage::getResourceModel('catalog/product_collection')->filterByWhateverYouWant();
foreach($collection as $product) {
$product->setNewAttribute('myCoolValue')->save();
}
Seien Sie vorsichtig damit. Dieses Skript macht eine Abfrage für jedes Produkt in der Sammlung, die möglicherweise viel sein könnte.