Création d'un attribut personnalisé via la configuration, mais il ne semble nouveaux produits

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

  •  16-10-2019
  •  | 
  •  

Question

Bonjour j'ai le code suivant de configuration:

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

Alors je déboguer les produits avec de "et" l'événement:

$product = $observer->getEvent()->getProduct();
Zend_Debug::dump($product->debug());die;

Le problème est que si je tente de sauver un produit déjà existant, il obtient l'événement et mon débogage apporte pas mon shipping_city d'attribut. Dans un nouveau produit, il apparaît dans mon débogage, mais seulement dans de cas de save_after, dans le aswell save_before ne marche pas apparaître ...

Les gars pensées?

Était-ce utile?

La solution

Si vous ajoutez un nouvel attribut et il a été ajouté à l'ensemble d'attributs que vous voulez dans, tout se passait bien avec $installer->addAttribute.

Le problème est, en raison de la EAV il n'y a pas de valeur pour votre nouvel attribut. Ce moyen d'interrogation et de filtrage par celui-ci, des moyens de filtrage par NULL et si vous appelez $product->getNewAttribute() vous obtenez juste NULL.

Mais ce comportement est correct et prévu.

Vous pouvez résoudre ce problème en écrivant un petit script et définir une valeur par défaut sur tous les produits, comme ceci:

$collection = Mage::getResourceModel('catalog/product_collection')->filterByWhateverYouWant();
foreach($collection as $product) {
    $product->setNewAttribute('myCoolValue')->save();
}

Soyez prudent. Ce script fait une requête pour chaque produit dans la collection qui pourrait être beaucoup.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top