2010-11-21 8 views
1

J'ai ajouté un attribut de commande personnalisé et mis à jour la page de paiement onepage. Maintenant j'essaye d'ajouter cet attribut au nouveau formulaire de commande dans l'admin. J'essaie d'étendre Mage_Adminhtml_Block_Sales_Order_Create_Form_Account et d'ajouter un nouveau champ dans la méthode _prepareForm() de la même manière que les champs Group et Email sont ajoutés.ajouter un attribut de commande personnalisée à la commande de dans magento admin

Comment obtenir l'attribut de commande? J'ai essayé plusieurs façons, mais rien ne fonctionne. Voici comment je crée l'attribut de commande personnalisé dans le fichier mysql-install:

$attribute = array(
     'type'   => 'int', 
     'label'   => 'myattr', 
     'visible'  => false, 
     'required'  => false, 
     'user_defined' => false, 
     'searchable' => false, 
     'filterable' => false, 
     'comparable' => false, 
); 
$installer->addAttribute('order', 'myattr', $attribute); 

et voilà comment je suis en train d'obtenir l'attribut:

$res = Mage::getSingleton('core/resource'); 
$eav = Mage::getModel('eav/config'); 
$attr = $eav->getAttribute('sales/order', 'myattr'); 

ou avec ceci:

$entityType = Mage::getModel('eav/config')->getEntityType('order'); 
$entityTypeId = $entityType->getEntityTypeId(); 

$attribute = Mage::getResourceModel('eav/entity_attribute_collection') 
       ->setCodeFilter('myattr') 
       ->setEntityTypeFilter($entityTypeId) 
       ->getFirstItem(); 

ou ceci:

$order = Mage::getResourceSingleton('sales/order'); 
$myAttr = $order->getAttribute('myattr'); 

Aucun d'entre eux ne fonctionne.

+0

Les questions abandonnées sont une douleur. Votre problème a-t-il été résolu (avec ou sans l'aide des réponses)? Si oui, veuillez envisager de répondre à la question vous-même. –

Répondre

0

Avez-vous vérifié que l'attribut est ajouté à la table eav_attribute dans la base de données avec le bon entity_type_id? (Je pense que sales_order est 11 par défaut, mais ne suppose pas que)

À première vue, il semble que vous devriez utiliser

$installer->addAttribute('sales/order', 'myattr', $attribute); 

HTH, JD

+0

J'utilise $ installer-> addAttribute ('order', 'myattr', $ attribute); mais je pense que c'est OK parce que j'utilise la classe Mage_Sales_Model_Mysql4_Setup dans mon programme d'installation sql. Order utilise une table plate, sales_flat_order, donc j'ai probablement besoin d'ajouter un champ au formulaire d'une manière différente des attributs client ou adresse. Est-il possible de l'ajouter à la _prepreForm de Mage_Adminhtml_Block_Sales_Order_Create_Form_Account? Peut-être un fichier similaire pour voir comment cela devrait être fait? – pablo

+0

Vous n'avez pas répondu à ma première question. Est l'attribut dans la table 'eav_attribute'. Si ce n'est pas le cas, alors vous devez changer la façon dont vous appelez '$ installer-> adAttribute (...)' –

+0

L'attribut n'est pas dans l'attribut eav_attribute mais aucun des champs sales_order n'est dans la table eav_attribute. – pablo

0

Sales/commande occasion pour utiliser le modèle EAV qui supporte les attributs, c'était avant 1.4.0 ou pas sûr. Je pense maintenant que vous devez faire:

$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'my_column', 'decimal(12,4)'); 

vous pouvez toujours ajouter l'attribut comme champ statique

$installer->addAttribute('order', 'my_column', array('type'=>'static')); 
0

Ce que je remarqué après beaucoup d'essais et d'erreurs était que le nouvel attribut doit avoir un défaut valeur (non nulle) pour fonctionner. D'une certaine manière, l'attribut n'est pas accessible en écriture s'il a une valeur 'NULL' dans la base de données. Donc, en utilisant ce tableau d'options d'attribut a travaillé pour moi:

$attribute = array(
'type'   => 'int', 
'label'   => 'myattr', 
'default'  => 0, 
'visible'  => false, 
'required'  => false, 
'user_defined' => true, 
'searchable' => false, 
'filterable' => false, 
'comparable' => false); 
Questions connexes