Creato un attributo personalizzato tramite l'installazione, ma sembra solo ai nuovi prodotti
-
16-10-2019 - |
Domanda
Ciao ho il codice di impostazione successivo:
$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();
Poi metto a punto i prodotti con de "e" evento:
$product = $observer->getEvent()->getProduct();
Zend_Debug::dump($product->debug());die;
Il problema è che se provo a salvare un prodotto già esistente, diventa l'evento e la mia di debug non porta la mia attributo shipping_city. In un nuovo prodotto apparire nel mio di debug, ma solo nel caso in de save_after, nel save_before doesnt appaiono aswell ...
Qualche idea ragazzi?
Soluzione
Se si aggiunge un nuovo attributo ed è stato aggiunto al set di attributi che si desidera in, tutto è andato bene con $installer->addAttribute
.
Il problema è che a causa della EAV non v'è alcun valore per il vostro nuovo attributo. Questo mezzo di interrogazione e filtraggio da esso, mezzi di filtraggio per NULL e se si chiama $product->getNewAttribute()
basta avere NULL
.
Ma questo comportamento è corretto e previsto.
È possibile risolvere questo problema scrivendo un piccolo script e l'impostazione di un valore di default su tutti i prodotti, in questo modo:
$collection = Mage::getResourceModel('catalog/product_collection')->filterByWhateverYouWant();
foreach($collection as $product) {
$product->setNewAttribute('myCoolValue')->save();
}
Fare attenzione con questo. Questo script fa una query per ogni prodotto della collezione, che potrebbe essere un sacco.