Конфигурация «зависит» с моделью спереди и бэкэнд
-
16-10-2019 - |
Вопрос
У меня трудности с функциональностью «зависит» в конфигурации.
Обычно добавление <depends>
Для какой -то опции конфигурации он скрыт, если значение данной опции не соответствует.
Например:
<option_one>
<label>Option 1</label>
...
</option_one>
<option_two>
<label>Option 2</label>
...
<depends><option_one>1</option_one></depends>
</option_two
Очевидно, мне не хватает некоторых полей, но вы поняли. Вариант 2 появляется только тогда, когда вариант 1 имеет значение '1'.
Теперь моя проблема в том, что когда я пытаюсь применить это к опции с помощью модели Backend и Frontend, это в зависимости не работает:
<option_three>
...
<frontend_model>module/adminhtml_form_field_test</frontend_model>
<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
...
<depends><option_one>1</option_one></depends>
</option_three>
Этот вариант не займет вариант 1 в учетной записи, он просто всегда виден.
Я делаю что -то не так, или это ошибка или «работает так, как разработано»?
Решение
Если вы не используете frontend_model
Ваш HTML для двух полей будет выглядеть так
<tr id="row_you_dependency_field_id">
<td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
<td class="value">
<select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
<tr id="row_your_dependent_field_id">
<td class="label">
<label for="your_dependent_field_id">Dependent Field</label>
</td>
<td class="value">
<select id="your_dependent_field_id" name="groups[general][fields][your_dependent_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
JavaScript для показа/скрытия зависимого поля будет выглядеть так
new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});
И Show/Hide будет работать нормально, потому что оба идентификатора присутствуют в HTML.
Но если вы используете frontend_model
Значение для второго поля отображается вашим пользовательским блоком module/adminhtml_form_field_test
и не содержит идентификатор зависимого поля, а JavaScript просто не знает, что скрывать.
<tr id="row_you_dependency_field_id">
<td class="label"><label for="you_dependency_field_id">Dependency Field</label></td>
<td class="value">
<select id="you_dependency_field_id" name="groups[general][fields][you_dependency_field_id][value]" class=" select">
<option value="1">Yes</option>
<option value="0" selected="selected">No</option>
</select>
</td>
</tr>
<tr id="row_your_dependent_field_id">
<td class="label">
<label for="your_dependent_field_id">Dependent Field</label>
</td>
<td class="value">
...
//The output of your frontend_model
...
</td>
</tr>
Так что перейдите к методу _tohtml () module/adminhtml_form_field_test
и обернуть выход в div
и укажите идентификатор для этого
$fieldId = $this->getElement()->getId();
//your html
<div id="field id here">
//your frontend_model html
</div>