Configurazione 'dipende' con il modello anteriore e back-end
-
16-10-2019 - |
Domanda
Sto avendo difficoltà con la 'dipende' funzionalità nella configurazione.
In genere, aggiungendo <depends>
a qualche opzione di configurazione, è nascosto a meno che le partite valore dell'opzione data.
Ad esempio:
<option_one>
<label>Option 1</label>
...
</option_one>
<option_two>
<label>Option 2</label>
...
<depends><option_one>1</option_one></depends>
</option_two
Ovviamente mi manca alcuni campi, ma si ottiene il punto. Opzione 2 appare solo quando l'opzione 1 ha il valore '1'.
Ora il mio problema è che quando cerco di applicare questa a un'opzione con un modello di backend e frontend, questa seconda non funziona:
<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>
Questa opzione non avrà l'opzione 1 nel conto, è solo sempre visibile.
sto facendo qualcosa di sbagliato, o si tratta di un bug, o 'funziona come previsto'?
Soluzione
Se non si utilizza frontend_model
tuo html per due campi sarà simile a questa ??p>
<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>
Il javascript per mostrare / nascondere campo dipendente sarà simile a questa ??p>
new FormElementDependenceController({"your_dependent_field_id":{"you_dependency_field id":"1"}});
E mostra / nascondi funziona bene perché entrambi gli ID sono presenti in html.
Ma se si utilizza frontend_model
il valore per il secondo campo è resa dal blocco personalizzato module/adminhtml_form_field_test
e non contiene id del campo dipendente e javascript semplicemente non sa cosa nascondere.
<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>
Quindi, andare a _toHtml () di module/adminhtml_form_field_test
e avvolgere l'output in div
e specificare l'ID per esso
$fieldId = $this->getElement()->getId();
//your html
<div id="field id here">
//your frontend_model html
</div>