Die Konfiguration 'hängt' mit dem Vorder- und Backend -Modell ab
-
16-10-2019 - |
Frage
Ich habe Schwierigkeiten mit der "Abhängigen" -Funktionalität in der Konfiguration.
Normalerweise hinzufügen <depends>
Bei einer Konfigurationsoption ist sie versteckt, sofern der Wert der angegebenen Option nicht übereinstimmt.
Zum Beispiel:
<option_one>
<label>Option 1</label>
...
</option_one>
<option_two>
<label>Option 2</label>
...
<depends><option_one>1</option_one></depends>
</option_two
Offensichtlich fehlt mir einige Felder, aber Sie bekommen den Punkt. Option 2 wird nur angezeigt, wenn Option 1 den Wert '1' hat.
Mein Problem ist nun, wenn ich versuche, dies auf eine Option mit einem Backend- und Frontend -Modell anzuwenden, funktioniert dies nicht:
<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>
Diese Option nimmt Option 1 in Konto nicht, sondern ist einfach immer sichtbar.
Mache ich etwas falsch oder ist das ein Fehler oder "funktioniert wie so gestaltet"?
Lösung
Wenn Sie nicht verwenden frontend_model
Ihr HTML für zwei Felder sieht so aus
<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>
Das JavaScript zum Anzeigen/Ausblenden -abhängigen Feld sieht so aus
new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});
Und Show/Hide funktioniert gut, da beide IDs in HTML vorhanden sind.
Aber wenn Sie verwenden frontend_model
Der Wert für das zweite Feld wird von Ihrem benutzerdefinierten Block erzeugt module/adminhtml_form_field_test
und enthält keine ID des abhängigen Feldes und JavaScript weiß einfach nicht, was zu verbergen ist.
<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>
Gehen Sie also zu _tohtml () Methode von module/adminhtml_form_field_test
und wickeln Sie die Ausgabe in ein div
und Geben Sie die ID dafür an
$fieldId = $this->getElement()->getId();
//your html
<div id="field id here">
//your frontend_model html
</div>