Frage

Ich entwickle eine Magento -Erweiterung, die der Kundenadresse mehrere benutzerdefinierte Attribute hinzufügt. Mein Ziel ist es, die Adresseingabefelder im Administratorbestellformular neu zu ordnen. Wenn ich die Sortierreihenfolge der Attribute ändere, ändert sich die Anordnung, jedoch nur für die benutzerdefinierten Attribute. IE Ich kann kein Eingabefeld für benutzerdefiniertes Attribut vor Eingabefeld für ein Systemattribut platzieren.

Ich habe den Quellcode in gelesen Mage_Adminhtml_Block_Sales_Order_Create_Form_Address und Mage_Customer_Model_Form aber kann immer noch nicht herausfinden, wie es geht.

Ist das überhaupt möglich? Wenn ja, wie erreichen ich es?

BearbeitenIn meinem MySQL4-Installation-0.1.0.Php-Skript verwende ich:

$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
));
War es hilfreich?

Lösung

Schauen Sie sich den Code an, der gefunden wurde Mage_Adminhtml_Block_Sales_Order_Create_Form_Address::_prepareForm. Danach ruft _addAttributesToForm Um alle Attribute hinzuzufügen, wird eine zusätzliche Verarbeitung auf einer Handvoll Standardattributen durchgeführt. Wenn dies der Fall ist, wird sie aus der Form entfernt und dann nach '^' zurückgefügt, was sie unabhängig von ihrer ursprünglichen Position an die Spitze der Form bringt.

Es ist sicherlich möglich, die Positionierung aller Attribute in der Form zu ändern, aber Sie müssen den Block erweitern, um die endgültige Positionierung der Formelemente zu steuern.

Andere Tipps

Wenn jemand anderes versucht, dies zu erreichen:

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

Die wichtigsten Informationen: $this->_form->getElement('lastname')->getId() ist das Element, nach dem das benutzerdefinierte Eingangsfeld positioniert werden muss.

Die Lösung, die ich verwendete, bestand darin, mein benutzerdefiniertes Attribut als Systemattribut zu definieren. Das einzige, was dafür erforderlich ist, war, den Parameter festzulegen 'benutzerdefinierten'Mit dem Wert 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 ));

Ich weiß nicht, ob der Unterschied zwischen einem System oder einem benutzerdefinierten Attribut wichtig ist.

NB (Magento 1.9.2.1): Ich musste die Parameterposition anstelle von 'sort_order' für die Methode AddAttribute verwenden ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top