我正在开发一个Magento扩展程序,该扩展名将几个自定义属性添加到客户地址。我的目标是重新排列管理顺序表格中的地址输入字段。当我更改属性的排序顺序时,安排会更改,但仅适用于自定义属性。即,在系统属性输入字段之前,我无法将输入字段用于自定义属性。

我已经阅读了源代码 Mage_Adminhtml_Block_Sales_Order_Create_Form_AddressMage_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归因
scroll top