Comment puis-je réorganiser les champs de formulaire pour les attributs d'adresse du client dans l'admin?

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

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
));
Était-ce utile?

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

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