system.xml зависимость от поля
Таким образом, вы можете установить в файле system.xml
модуля зависимость между полями, добавив тег <depends>
в одно из полей.
<field1>
....
</field1>
<field2>
....
<depends>
<field1>1</field1>
</depends>
</field2>
Приведенный выше код означает, что field2
будет отображаться, когда значение field1
равно 1
.
Я хочу знать, как/могу ли я сказать Magento, чтобы он показывал field2
, если значение field1
равно 1
ИЛИ 2
?
2 answers
Попробуйте это:
<depends>
<field separator="|">
<value>1|2|3</value>
</field>
</depends>
[ РЕДАКТИРОВАТЬ]
Я ошибся в своем ответе ниже. Я не буду удалять его (пока), потому что у меня 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, который обрабатывает это, и добавить его в конфигурацию страница.