La configuración 'depende' con el modelo frontal y el backend

8

Tengo dificultades con la funcionalidad 'depende' en la configuración.

Normalmente, agregando <depends>a alguna opción de configuración, está oculto a menos que el valor de la opción dada coincida.

Por ejemplo:

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

Obviamente me faltan algunos campos, pero entiendes el punto. La opción 2 solo aparece cuando la opción 1 tiene el valor '1'.

Ahora mi problema es que, cuando trato de aplicar esto a una opción con un modelo de backend y frontend, esto no funciona:

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

Esta opción no tendrá en cuenta la Opción 1, solo está siempre visible.

¿Estoy haciendo algo mal, o es un error, o "funciona según lo diseñado"?

Maikel Koek
fuente

Respuestas:

8

Si no usa frontend_modelsu html para dos campos, se verá así

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

El javascript para mostrar / ocultar el campo dependiente se verá así

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

Y show / hide funcionará bien porque ambos identificadores están presentes en html.

Pero si usa frontend_modelel valor para el segundo campo, lo representa su bloque personalizado module/adminhtml_form_field_testy no contiene la identificación del campo dependiente y JavaScript simplemente no sabe qué ocultar.

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

Vaya al método _toHtml () module/adminhtml_form_field_testy envuelva la salida divy especifique la identificación para ello

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

//your html 
<div id="field id here">
    //your frontend_model html
</div>
oleksii.svarychevskyi
fuente
No probé esto todavía, pero suena legítimo. Me parece como un insecto. ¡No sobrescribí _toHtml en mi modelo personalizado, pero creo que voy a reescribir este método para evitar que esto suceda en el futuro!
Maikel Koek
Usted, señor, es un caballero y un erudito. Envolviendo la salida del frontend_model con '<div id = "'. $ This-> getElement () -> getId (). '">' Funciona absolutamente.
Luke A. Leber