Как я могу изменить поля формы для атрибутов адреса клиента в администраторе?

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

Вопрос

Я разрабатываю расширение Magento, которое добавляет несколько пользовательских атрибутов к адресу клиента. Моя цель - изменить поля ввода адреса в форме заказа администратора. Когда я меняю порядок сортировки атрибутов, расположение меняется, но только для пользовательских атрибутов. Т.е. я не могу разместить поле ввода для пользовательского атрибута перед полем ввода для атрибута системы.

Я прочитал исходный код в Mage_Adminhtml_Block_Sales_Order_Create_Form_Address а также Mage_Customer_Model_Form Но все еще не может понять, как это сделать.

Это вообще возможно? Если да, то как мне это достичь?

РедактироватьВ моем скрипте mysql4-install-0.1.0.php я использую:

$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
));
Это было полезно?

Решение

Взгляните на код, найденный в Mage_Adminhtml_Block_Sales_Order_Create_Form_Address::_prepareForm. Анкет После того, как это звонит _addAttributesToForm Чтобы добавить все атрибуты, он выполняет дополнительную обработку на горстке атрибутов по умолчанию. Когда это произойдет, он удаляет их из формы, а затем добавляет их обратно после «^», что поставит их в верхнюю часть формы независимо от их первоначальной позиции.

Конечно, можно изменить позиционирование всех атрибутов в форме, но для этого вам нужно будет расширить блок, чтобы контролировать окончательное позиционирование элементов формы.

Другие советы

Если кто -то еще пытается достичь этого:

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

Ключевая информация: $this->_form->getElement('lastname')->getId() является элементом, после чего должно быть расположено пользовательское поле ввода.

Решение, которое я использовал, заключалось в том, чтобы определить мой пользовательский атрибут как атрибут системы. Единственное, что требуется для этого, - это установить параметр 'определяемые пользователем'С значением 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 ));

Не знаю, имеет ли значение разница между системой или пользователем атрибутом.

NB (Magento 1.9.2.1): мне пришлось использовать параметр «позиция» вместо «sort_order» для метода addattribute ()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top