【问题标题】:Making magento admin field dependent on more than one value or field?使magento管理字段依赖于多个值或字段?
【发布时间】:2014-04-14 10:05:19
【问题描述】:

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

我正在尝试在 magento 后端创建一个表单。我有一个下拉列表 Dropdown,其值为 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() 结果的变量

【问题讨论】:

  • 您是否尝试将addFieldDependence 的最后一个参数设置为数组?我的意思是->addFieldDependence($X->getName(), $dropdown->getName(), array(1,2))
  • 感谢马吕斯的回复。我现在试过了,它不起作用。它根本没有显示该字段。

标签: magento


【解决方案1】:

你可以。

更多领域
只需添加更多依赖项:

->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.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;
            }
        }
    }
....

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

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

【讨论】:

    【解决方案2】:

    解决这个问题的简单方法是在管理部分使用 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>
    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
    ));
    

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

    希望对你有帮助

    【讨论】:

    • 这不是一个正确的答案...... magento已经允许这个,你不需要添加jquery
    猜你喜欢
    • 2011-06-18
    • 2012-04-14
    • 2019-08-27
    • 2014-12-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2014-10-23
    • 2022-01-04
    相关资源
    最近更新 更多