Konfigurasi 'tergantung' dengan model depan dan belakang

8

Saya mengalami kesulitan dengan fungsionalitas 'tergantung' dalam konfigurasi.

Biasanya, menambahkan <depends>ke beberapa opsi konfigurasi, itu disembunyikan kecuali nilai opsi yang diberikan cocok.

Sebagai contoh:

<option_one>
    <label>Option 1</label>
    ...
</option_one>
<option_two>
    <label>Option 2</label>
    ...
    <depends><option_one>1</option_one></depends>
</option_two

Jelas saya kehilangan beberapa bidang, tetapi Anda mengerti maksudnya. Opsi 2 hanya muncul ketika Opsi 1 memiliki nilai '1'.

Sekarang masalah saya adalah, ketika saya mencoba menerapkan ini pada opsi dengan model backend dan frontend, ini tergantung tidak bekerja:

<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>

Opsi ini tidak akan mengambil Opsi 1 di akun, itu selalu terlihat.

Apakah saya melakukan sesuatu yang salah, atau ini bug, atau 'berfungsi sebagaimana dirancang'?

Maikel Koek
sumber

Jawaban:

8

Jika Anda tidak menggunakan frontend_modelhtml Anda untuk dua bidang akan terlihat seperti ini

<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 untuk menampilkan / menyembunyikan bidang bergantung akan terlihat seperti ini

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

Dan tampilkan / sembunyikan akan berfungsi dengan baik karena kedua id hadir dalam html.

Tetapi jika Anda menggunakan frontend_modelnilai untuk bidang kedua diberikan oleh blok kustom Anda module/adminhtml_form_field_testdan tidak mengandung id bidang dependen dan javascript tidak tahu apa yang harus disembunyikan.

<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>

Jadi pergi ke metode _toHtml () module/adminhtml_form_field_testdan bungkus output ke dalam divdan tentukan id untuk itu

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

//your html 
<div id="field id here">
    //your frontend_model html
</div>
oleksii.svarychevskyi
sumber
Belum menguji ini, tapi kedengarannya sah. Sepertinya bug bagi saya. Saya tidak menimpa _toHtml dalam model khusus saya, tetapi saya pikir saya akan menulis ulang metode ini untuk mencegah hal ini terjadi di masa depan!
Maikel Koek
Anda Tuan, adalah seorang pria dan sarjana. Membungkus output dari frontend_model dengan '<div id = "'. $ This-> getElement () -> getId (). '">' Benar-benar berfungsi.
Luke A. Leber