Creato un attributo personalizzato tramite l'installazione, ma sembra solo ai nuovi prodotti

magento.stackexchange https://magento.stackexchange.com/questions/11424

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top