Comment puis-je réorganiser les champs de formulaire pour les attributs d'adresse du client dans l'admin?
Question
Je développe une extension Magento qui ajoute plusieurs attributs personnalisés à l'adresse du client. Mon but est de réorganiser les champs d'entrée d'adresse dans le formulaire de commande admin. Quand je change l'ordre de tri des attributs, les changements d'arrangement, mais seulement pour les attributs personnalisés. C'est à dire. Je ne peux pas lieu champ de saisie pour l'attribut personnalisé avant champ de saisie pour un attribut système.
J'ai lu le code source dans Mage_Adminhtml_Block_Sales_Order_Create_Form_Address
et Mage_Customer_Model_Form
mais ne peut toujours pas comprendre comment le faire.
Est-ce possible? Si oui, comment puis-je y parvenir?
Modifier Dans mon script mysql4-install-0.1.0.php, j'utilise:
$this->addAttribute('customer_address', 'carrier_office_name', array(
'type' => 'int',
'input' => 'text',
'label' => 'Carrier office name',
'global' => 1,
'visible' => 1,
'sort_order' => 247, // example
'required' => 0,
'user_defined' => 1,
'visible_on_front' => 1
));
La solution
Jetez un oeil sur le code trouvé dans Mage_Adminhtml_Block_Sales_Order_Create_Form_Address::_prepareForm
. Après qu'il appelle _addAttributesToForm
d'ajouter tous les attributs, il fait un traitement supplémentaire sur une poignée des attributs par défaut. Quand il le fait, il est de les retirer de la forme, puis les réintégrant après « ^ » qui les mettra au sommet de la forme quel que soit leur position initiale.
Il est certainement possible de modifier le positionnement de tous les attributs de la forme, mais pour ce faire, vous devez étendre le bloc afin de contrôler le positionnement final des éléments de formulaire.
Autres conseils
Si quelqu'un d'autre tente de réaliser ceci:
$someFieldName = $this->_form->getElement('some_field_name');
//Remove the element from its default position
$fieldset->removeField($someFieldName->getId());
//Add new field
$someNewField = $fieldset->addField($someFieldName->getId(),
'text',
$someFieldName->getData(),
**$this->_form->getElement('lastname')->getId()**);
La pièce maîtresse de l'info. $this->_form->getElement('lastname')->getId()
est le AFTER élément que le champ de saisie personnalisé doit être positionné
La solution que j'était de définir mon attribut personnalisé comme un attribut système. La seule chose nécessaire pour qui devait régler le paramètre ' USER_DEFINED avec la valeur 0 .
$this->addAttribute('customer_address', 'mobile', array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Mobile',
'global' => 1,
'visible' => 1,
'required' => 0,
'user_defined' => 0,
'visible_on_front' => 1,
'position' => 130 ));
Ne pas savoir si la différence entre un système ou les questions d'attributs définis par l'utilisateur.
NB (magento 1.9.2.1): il fallait utiliser le paramètre 'position' au lieu de 'sort_order' pour la méthode addAttribute ()