Die Konfiguration hängt vom Front- und Backend-Modell ab


8

Ich habe Probleme mit der "abhängigen" Funktionalität in der Konfiguration.

Normalerweise wird eine <depends>Konfigurationsoption ausgeblendet, 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

Natürlich fehlen mir einige Felder, aber Sie verstehen es. 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 abhängig davon 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 berücksichtigt Option 1 nicht, sondern ist immer sichtbar.

Mache ich etwas falsch oder ist das ein Fehler oder funktioniert es wie geplant?

Antworten:


8

Wenn Sie frontend_modelIhr HTML nicht für zwei Felder verwenden, sieht es 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 des abhängigen Felds sieht folgendermaßen aus

new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});

Und show / hide funktioniert einwandfrei, da beide IDs in HTML vorhanden sind.

Wenn Sie jedoch frontend_modelden Wert für das zweite Feld verwenden, wird dieser von Ihrem benutzerdefinierten Block gerendert module/adminhtml_form_field_testund enthält keine ID des abhängigen Felds. 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 zur _toHtml () -Methode von module/adminhtml_form_field_testund verpacken Sie die Ausgabe in divund geben Sie die ID dafür an

$fieldId = $this->getElement()->getId();

//your html 
<div id="field id here">
    //your frontend_model html
</div>

Habe das noch nicht getestet, aber es klingt echt. Scheint mir ein Fehler zu sein. Ich habe _toHtml in meinem benutzerdefinierten Modell nicht überschrieben, aber ich denke, ich werde diese Methode neu schreiben, um dies in Zukunft zu verhindern!
Maikel Koek

Sie, Sir, sind ein Gentleman und ein Gelehrter. Das Umschließen der Ausgabe des Frontend-Modells mit '<div id = "'. $ This-> getElement () -> getId (). '">' Funktioniert absolut.
Luke A. Leber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.