3

在此处输入图像描述

我们如何更改管理表单元素的位置(排序顺序)?

4

2 回答 2

3

TL;博士:

在定义字段时,您可以将插入符号指定^为可选的第四个参数:

    $fieldset->addField('my_element','text',array(
      'name'  => 'my_element',
      'label' => Mage::helper('customer')->__('My Element')
    ),'^');

更多信息

Varien_Data_Form_Abstract::addField

/**
 * Add child element
 *
 * if $after parameter is false - then element adds to end of collection
 * if $after parameter is null - then element adds to befin of collection
 * if $after parameter is string - then element adds after of the element with some id
 *
 * @param   string $elementId
 * @param   string $type
 * @param   array  $config
 * @param   mixed  $after
 * @return Varien_Data_Form_Element_Abstract
 */
public function addField($elementId, $type, $config, $after=false)
{
    if (isset($this->_types[$type])) {
        $className = $this->_types[$type];
    }
    else {
        $className = 'Varien_Data_Form_Element_'.ucfirst(strtolower($type));
    }
    $element = new $className($config);
    $element->setId($elementId);
    if ($element->getRequired()) {
        $element->addClass('required-entry');
    }
    $this->addElement($element, $after);
    return $element;
}

评论告诉你如何订购你的元素。因此,要定位您的字段,请指定第四个参数$aftersomefield您希望放置的字段的 ID。

当您在自己的类中扩展客户帐户表单时,这很有用。这是一个将新表单元素放在表单中第一个元素上方的示例:

class Yourcompany_Adminhtml_Block_Customer_Edit_Tab_Account extends Mage_Adminhtml_Block_Customer_Edit_Tab_Account {

  ...

  public function initForm() {
    parent::initForm();

    $form=$this->getForm();

    $fieldset=$form->getElement('base_fieldset');

    $fieldset->addField('my_element','text',array(
      'name'  => 'my_element',
      'label' => Mage::helper('customer')->__('My Element')
    ),'^');

    return $this;
  }

  ...

}

你可能会注意到一些奇怪的事情。我调用的第四个参数addField是插入符号 ( '^')。这会将元素放在表单的最顶部,这就是您在问题中提出的问题。

可是等等!为什么这与上面显示的代码文档不匹配?!好吧,它看起来像是在开发过程中一致的编码约定的脱节。如果您按照代码进行操作,您会发现addField可以使用该Varien_Data_Form_Element_Collection::add方法。在这里,我们看到了第二个参数 ,$after它在评论中指出:

/**
 * Add element to collection
 *
 * @todo get it straight with $after
 * @param Varien_Data_Form_Element_Abstract $element
 * @param boolean|'^'|string $after
 * @return Varien_Data_Form_Element_Abstract
 */
public function add(Varien_Data_Form_Element_Abstract $element, $after=false)

在这里,我们发现false将元素附加到字段集,一个^字符在元素前面,传入元素 ID 会将元素放在指定的元素之后。


更新:如何处理现有字段

如果您想重新排序现有字段怎么办?不幸的是,排序是在添加字段时进行的,之后就不能方便地更改。但我可以提供两种方法来完成工作。

方法1:通过删除和添加重新排序

$fieldset->removeField('core_element');
$fieldset->addField('core_element','text',array(
  'name'  => 'core_element',
  'label' => Mage::helper('customer')->__('Core Element')
),'^');

这是一个简单的解决方案,但需要您手动重新定义该字段。在某些情况下,这很容易。在其他情况下,并非如此。对于这些场景,请参阅下一个。

方法2:通过克隆重新排序

$element=clone $form->getElement('core_element');
$fieldset->removeField('core_element');
$fieldset->addElement($element,'^');

我认为这是最好的解决方案,因为它保留了最初编写的元素定义。这对于其字段部分由其frontend_input_renderer类生成的属性的情况尤其重要。在此处了解更多信息。

于 2014-01-06T20:14:36.590 回答
1

检查“customer_eav_attribute”表中的“attribute_id”和“sort_order”字段。

于 2013-05-10T10:01:14.700 回答