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

Has*_*eed 8 magento

首先,我已经看到这个问题,magento adminhtml字段可以依赖于多个字段或值吗? 它讨论了系统/配置字段,这不是我想要的.

我正在尝试在magento后端创建一个表单.我有一个下拉列表下拉与值1,2和3.我需要显示的区域X当我选择1或2.我该怎么办呢?

我可以根据下拉列表的单个值显示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)
);
Run Code Online (Sandbox Code Playgroud)

哪里$x$dropdown哪些是存储addField()结果的变量

Won*_*and 11

您可以.

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

->addFieldDependence($X->getName(), $dropdown_1->getName(), $value_dw_1)
->addFieldDependence($X->getName(), $dropdown_2->getName(),$value_dw_2)
Run Code Online (Sandbox Code Playgroud)

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

->addFieldDependence($X->getName(), $dropdown->getName(), array($value1,value2))
Run Code Online (Sandbox Code Playgroud)

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

->addFieldDependence($X->getName(), $dropdown->getName(), array((string)$value1,(string)value2))
Run Code Online (Sandbox Code Playgroud)

有一个原因可以js/mage/adminhtml/form.js在方法trackChange中跟踪这个问题,你会看到这段代码:

...
// 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;
            }
        }
    }
....
Run Code Online (Sandbox Code Playgroud)

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

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


小智 -1

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

  1. 在您的管理部分中包含 jquery 文件,您可以通过将其包含在布局文件中来完成此操作

<reference name = "head">
  <action method="addJs"><script>jquery/jquery.js</script></action>
  <action method="addJs"><script>jquery/jquery.noconflict.js</script></action>
</reference>
Run Code Online (Sandbox Code Playgroud)

  1. 然后在管理编辑表单代码中,检查单击:
$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
));
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助