首先,我已经看到了这个问题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()
结果
答案 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.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]
没有处理类型
答案 1 :(得分:-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>
$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代码以根据所选值显示/隐藏字段。
希望这有帮助