¿Cómo puedo reorganizar los campos de formulario para los atributos de la dirección del cliente en el administrador?

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

Pregunta

Estoy desarrollando una extensión de Magento que agrega varios atributos personalizados a la dirección del cliente. Mi objetivo es reorganizar los campos de entrada de la dirección en el formulario de orden de administración. Cuando cambio el orden de clasificación de los atributos, la disposición cambia, pero solo para los atributos personalizados. Es decir, no puedo colocar el campo de entrada para el atributo personalizado antes del campo de entrada para un atributo del sistema.

He leído el código fuente en Mage_Adminhtml_Block_Sales_Order_Create_Form_Address y Mage_Customer_Model_Form Pero aún no puedo entender cómo hacerlo.

¿Es esto posible en absoluto? Si es así, ¿cómo lo hago?

EditarEn mi script mysql4-install-0.1.0.php, uso:

$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
));
¿Fue útil?

Solución

Eche un vistazo al código que se encuentra en Mage_Adminhtml_Block_Sales_Order_Create_Form_Address::_prepareForm. Después de que llama _addAttributesToForm Para agregar todos los atributos, realiza un procesamiento adicional en un puñado de los atributos predeterminados. Cuando hace esto, los está quitando del formulario, luego agregándolos nuevamente después de '^', lo que los pondrá en la parte superior de la forma independientemente de su posición original.

Ciertamente es posible alterar el posicionamiento de todos los atributos en el formulario, pero para hacerlo, deberá extender el bloque para controlar el posicionamiento final de los elementos de formulario.

Otros consejos

Si alguien más está tratando de lograr esto:

$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 información clave: $this->_form->getElement('lastname')->getId() es el elemento después del cual el campo de entrada personalizado debe colocarse.

La solución que utilicé fue definir mi atributo personalizado como atributo del sistema. Lo único requerido para eso era establecer el parámetro 'usuario definido'Con el valor 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 ));

No sé si la diferencia entre un atributo definido por el sistema o el usuario es importante.

NB (Magento 1.9.2.1): Tuve que usar el parámetro 'posición' en lugar de 'sort_order' para el método addattribute ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top