如何重新安排admin中的客户地址属性表单字段?
题
我正在开发一个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()