зависимость поля system.xml

16

Таким образом, вы можете установить в system.xmlфайле модуля зависимость между полями, добавив <depends>тег в одно из полей.

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

Код выше означает , что field2будет показано , когда значение field1является 1. Я хочу знать , как / могу , если я скажу Magento , чтобы показать , field2если значение field1является 1OR 2?

Мариус
источник

Ответы:

29

Попробуй это:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Александр
источник
Знаете ли вы, что это работает, или вы просто делаете это?
отметки
1
Чувак ... я не знаю как, но на самом деле это работает. Теперь мне стыдно и извиняюсь за все мои плохие слова, которые я сказал парням, которые реализовали раздел конфигурации. По какой-то причине $dependent['separator']возвращает значение атрибута separator. Для тех, кто когда-либо отрицал это, пожалуйста, проголосуйте (дважды, если это возможно). Работает отлично. Благодарю. cc @benmarks
Marius
1
Это работает! = Это хорошая идея. Я думаю, что нет необходимости извиняться за ваши слова :-D
отметки
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
Черт. Я знаю такие ошибки :-) Надеюсь, вы сообщили об этом? Отличное понимание!
Фабиан Блехшмидт
1
О, мужик, это какое-то великое расследование, ты уверен, что не Шерлок? +1 за сообщение.
Дэвид Мэннерс
2
@DavidManners элементарно мой дорогой Ватсон
Мариус