залежність поля 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

[EDIT]

Я помилився у своїй відповіді нижче. Я не буду його видаляти (поки), тому що я отримав 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 елементарний мій дорогий ватсон
Маріус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.