2010-10-08 1 views
1

J'écris un module d'importation pour importer des produits configurables dans magento, qui fonctionne très bien. J'ai modifié l'importation afin qu'elle puisse créer tous les ensembles d'attributs, attributs et options d'attributs nécessaires pour créer les produits configurables. Jusqu'à présent, tout fonctionne ... tout à fait.Création d'un nouvel attribut ne met pas à jour produit des données plates

Lorsque l'importation crée un nouvel attribut, il ne peut pas créer le produit configurable. Lorsque je modifie le nouvel attribut dans le backend et que je l'enregistre sans modifications, un message s'affiche pour me demander de mettre à jour certains index. Après avoir mis à jour l'index de données de produit plat, je peux réexécuter l'importation et tout fonctionne correctement.

J'ai essayé de façons de créer un nouvel attribut:

$setup = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');  
$setup->addAttribute(
       $this->getEntityTypeId(), 
       $code, 
       array(
        'attribute_code'   => $code, 
        'label'      => ucfirst($code), 
        //'group'     => $attributeSet->getId(), 
        'user_defined'    => 1, 
        'global'     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 
        'input'      => 'select', 
        'unique'     => 0, 
        'required'     => 0, 
        'configurable'    => 1, 
        'filterable'    => 1, 
        'visible_on_front'   => 1, 
        'used_in_product_listing' => 1, 
        'frontend_label'   => array(
         $code 
        ) 
       ) 
      ); 

L'autre façon est:

$attribute = Mage::getModel("catalog/resource_eav_attribute"); 
     $attribute->addData(
      array(
       'entity_type_id'   => $this->getEntityTypeId(), 
       'attribute_code'   => $code, 
       'label'      => ucfirst($code), 
       //'group'     => $attributeSet->getId(), 
       'is_user_defined'   => 1, 
       'is_global'     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 
       'frontend_input'   => 'select', 
       'is_unique'     => 0, 
       'is_required'    => 0, 
       'is_configurable'   => 1, 
       'is_filterable'    => 1, 
       'is_visible_on_front'  => 1, 
       'is_used_in_product_listing'=> 1, 
       'frontend_label'   => array(
        $code 
       ) 
      ) 
     ); 

     $attribute->save(); 

Les deux codes créent l'attribut bien mais je ne peux pas l'utiliser pour créer Attributs configurables. J'ai essayé d'exécuter manuellement les scripts d'index mais cela ne m'aide pas.

Qu'est-ce que je fais mal? La création de nouveaux attributs est-elle en quelque sorte la magie noire de Magento? :-D

Répondre

0

J'ai oublié de définir le type de back-end pour le nouvel attribut « int » il a été automatiquement réglé sur statique (ce qui signifie magento cherche dans la table de l'entité).

L'autre chose est que je ne pouvais pas définir la valeur d'attribut comme ceci:

$model->setData("newattributecode", 123); 

Magento juste n'a pas enregistré l'attribut. Au lieu de cela, je devais utiliser la fonction non documentée Mage_Catalog_Model_Product::addAttributeUpdate() pour enregistrer la valeur d'attribut de ce modèle:

$model->addAttributeUpdate("newattributecode", 123, 0); 
+0

Pour ajouter à cela, ne pas appeler $ model-> save() par la suite. Je l'ai fait et je me suis demandé si la valeur de l'attribut (123 ici par exemple) était remise à zéro. – kguest

Questions connexes