system.xml字段依赖性


16

因此,您可以system.xml通过<depends>在一个字段中添加标签来在模块文件中设置字段之间的依赖关系。

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>1</field1>
    </depends>
</field2>

上面的代码意味着field2将在field1is 的值时显示1。我想知道如何/是否可以告诉Magento以显示field2for的field1值为1OR 2

Answers:


29

尝试这个:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>

您知道这可行吗,还是只是将其发布?
benmarks 2014年

1
杜德(Dude)...我不知道如何,但这确实有效。现在,我对所有对实现config节的家伙说的不好的话感到as愧和抱歉。由于某种原因,$dependent['separator']返回属性的值separator。向曾对此表示反对的人,请进行投票(如果可能,请两次)。完美运作。谢谢。cc @benmarks
Marius

1
这是可行的!=一个好主意。我认为您无需为您的话道歉:-D
benmarks,2014年

7

[编辑]

我在下面的回答中错了。我不会删除它(但),因为我对此有7个支持:)。但是我正在编辑它,以便你们所有人都有机会撤回您的投票(甚至投票,因为我应得的)。

原始答案

哈!..我找到了。
简短答案:您不能!
长答案:如果有人知道数组和对象之间的区别,那么您应该可以这样做。
理论上这应该可行

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>
           <value>1|2</value>
           <separator>|</separator>
       </field1>
    </depends>
</field2>

但是在处理依赖关系的代码中,Mage_Adminhtml_Block_System_Config_Form::initFields第366行附近有此代码

if (isset($dependent['separator'])) {
    $dependentValue = explode((string)$dependent['separator'], $dependentValue);
}

$dependent始终是一个对象,因此$dependent['separator']永远不会设置。
如果我将上面的代码更改为

if (isset($dependent->separator)) {
    $dependentValue = explode((string)$dependent->separator, $dependentValue);
}

一切顺利。
我想我不能仅仅为了扩展而更改内核,所以我必须创建2个字段而不是1个字段,field1或者为每个值创建一个字段,或者创建一个处理该字段并将其添加到配置页面的自定义js。


2
该死的。我知道这类错误:-)希望您报告了吗?伟大的见识!
Fabian Blechschmidt

1
噢,伙计,这是一个伟大的调查,您确定您不是夏洛克吗?+1报告。
David Manners

2
@DavidManners小学我亲爱的沃森
马吕斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.