使magento管理字段依赖于多个值或字段?

时间:2014-04-14 10:05:20

标签: magento

首先,我已经看到了这个问题can a magento adminhtml field depend on more then one field or value? 它讨论了系统/配置字段,这不是我想要的。

我正在尝试在magento后端创建一个表单。我有一个下拉下拉列表,其值为1,2和3。 当我选择1或2时,我需要显示字段X.我该怎么做?

我可以根据下拉列表的单个值显示X,而不是多个值。

这就是我的表现:

$this->setChild('form_after',$this->getLayout()->createBlock('adminhtml/widget_form_element_dependence')
            ->addFieldMap($X->getHtmlId(), $Xl->getName())
            ->addFieldMap($dropdown->getHtmlId(), $dropdown->getName())
            ->addFieldDependence($X->getName(), $dropdown->getName(), 1)
);

$x$dropdown是存储addField()结果

的变量

2 个答案:

答案 0 :(得分:10)

你可以。

更多字段
只需添加更多依赖项:

->addFieldDependence($X->getName(), $dropdown_1->getName(), $value_dw_1)
->addFieldDependence($X->getName(), $dropdown_2->getName(),$value_dw_2)

更多值(相同字段)
您应该传递一组值:

->addFieldDependence($X->getName(), $dropdown->getName(), array($value1,value2))

如果$value1/$value2是数字,最好将它们转换为字符串,否则无法正常工作:

->addFieldDependence($X->getName(), $dropdown->getName(), array((string)$value1,(string)value2))

有一个原因可以在方法js/mage/adminhtml/form.jstrackChange跟踪此问题,您会看到此代码:

...
// define whether the target should show up
    var shouldShowUp = true;
    for (var idFrom in valuesFrom) {
        var from = $(idFrom);
        if (valuesFrom[idFrom] instanceof Array) {
            if (!from || valuesFrom[idFrom].indexOf(from.value) == -1) {
                shouldShowUp = false;
            }
        } else {
            if (!from || from.value != valuesFrom[idFrom]) {
                shouldShowUp = false;
            }
        }
    }
....

你看到valuesFrom[idFrom]使用indexOf来检查是否显示字段,这会导致问题,因为它认为indexOf进行了比较,照顾了类型和from.value它包含一个字符串,而在数组valuesFrom[idFrom]中我们有一个数组数组...

单个值不会发生此问题,因为from.value != valuesFrom[idFrom]没有处理类型

答案 1 :(得分:-1)

简单的解决方法是在管理部分使用jquery。

  1. 在您的管理部分中包含jquery文件,您可以将其包含在布局文件
  2. <reference name = "head">
      <action method="addJs"><script>jquery/jquery.js</script></action>
      <action method="addJs"><script>jquery/jquery.noconflict.js</script></action>
    </reference>

    1. 然后在管理编辑表单代码中,检查点击:
    2. $fieldset->addField('market_days', 'multiselect', array(
                                  'label'     => Mage::helper('marketmanagement')->__('Select Days'),
                                  'class'     => 'required-entry market-days',
                                  'required'  => true,
                                  'name'      => 'market_days',
                                  'onclick' => ""//jquery code here
      ));
      

      您可以编写jquery代码以根据所选值显示/隐藏字段。

      希望这有帮助