Pregunta

Sé que para crear una dependencia para los campos, es posible usar el nodo

<depends />

Dicho esto, he estado probando varias formas de crear un grupo de dependencia, pero me parece que no puede encontrar una manera de hacer uso de Magento, en el real Form.php el código menciona

$dependent->fieldset

Por lo que podría estar allí, pero no he sido capaz de sacar provecho de ella.

Editar:En la investigación posterior parece que sólo recorre los campos de leer las dependencias ya que en Mage_Adminhtml_Block_System_Config_form::initFields()

foreach ($group->fields as $elements) {

Todavía sería una buena cosa para saber cómo lograr esto

¿Fue útil?

Solución

Puede poner JavaScript en el área de comentarios.Puede ser algo como esto:

<comment><![CDATA[
    <script type="text/javascript">
        document.observe("dom:loaded",function(){
            if($('sections_groups_value').value != some_value){
                 Element.up($('sections_groups')).hide();
            }
        });
        Event.observe('sections_groups_value', 'change', function(){
            if(this.value != some_value){
                Element.up($('sections_groups')).hide();
            }else if(this.value == some_value){
                Element.up($('sections_groups')).show();
            }
        })
    </script>]]>
</comment>

Reemplace "Secciones_groups_Value", "Some_Value" y "Secciones_Groups" en consecuencia.

Otros consejos

Primero de todo, me falta la aclaración en el siguiente texto.

He estado probando varias formas de crear un grupo de dependencia

Están realmente tratando de lograr grupo de dependencia de campo de dependencia ?

Para hacer el punto más claro, groups y fields son diferentes en la configuración del sistema.Los grupos significa una colección de campos relacionados.

Una colección de relacionados fields constituyen un group.Una colección de relacionados con los grupos constituyen un section y el cobro de dichas secciones constituyen la totalidad del sistema de configuración de página.

Si usted está hablando sobre el campo de la dependencia, entonces este el enlace es buen punto de partida.

Si usted realmente necesita para ver en tiempo real ejemplo, usted puede mirar en Mage_Customer el módulo.Allí dentro app/code/core/Mage/Customer/etc/system.xml, usted puede encontrar la definición para el grupo create_account.Se puede ver que más de uno de los campos en que grupo depende de un campo con nombre auto_group_assign.Si usted sigue la misma convención declarar sus campos personalizados, entonces usted puede fácilmente conseguir lo que realmente quieres.

Descargo de responsabilidad :- sección Siguiente está basado en mi observación y se puede o puede no ser la correcta.Si estoy equivocado, por favor me corrija :-)

A partir de su editar, Puedo ver que estás en la dirección correcta.Por tanto, me gustaría dar una pequeña explicación sobre esta parte.

El método que se ha hecho referencia es Mage_Adminhtml_Block_System_Config_Form::initFields(). Mage_Adminhtml_Block_System_Config_Form es una clase que se utiliza para constituir un sistema de formulario de configuración. initFields() es un método que se utiliza para generar los campos de un grupo en particular.

Si usted mirar de cerca en este método, se pueden encontrar tres bucles.A continuación voy a mostrar su estructura

foreach ($group->fields as $elements) {

    //doing sorting on fields in a specific group and 
    //store sorted array of fields in $elements.

    foreach ($elements as $element) {

        //more more codes

        if ($element->depends) {
            foreach ($element->depends->children() as $dependent) {
            }
        }
    }
}

Aquí primero foreach bucle recoge los campos que viene dentro de un grupo en particular (o conjunto de campos).Esta colección se genera a partir de configuración xml que se realiza a través de system.xml archivo.Así de recolección en el campo que $group->fields tiene un sin clasificar de la matriz.Por lo tanto initField() método que realiza una clasificación y, a continuación, mantener ordenado los campos como una matriz en $elements.Así que el segundo foreach bucle es de nuevo el bucle a través de una matriz ordenada de los campos.

Un montón de cosas que suceden dentro de este bucle.No voy a explicar qué es exactamente lo que sucederá allí.Sin embargo, nuestra área de interés es la siguiente foreach sección de bucle.Antes de este bucle se ejecuta, initFields() método comprueba la dependencia de un campo if ($element->depends).Así que la dependencia se especifica, se repite a través de aquellos en función de los campos.($element->depends->children() en realidad genera una matriz en función de los campos.que es de los campos en los cuales la corriente de campo es dependiendo).

Espera...es iterar a través de una colección de en función de los campos !!!!Esto significa que, podemos tener múltiples número de oficinas de la dependencia para un campo en particular.En este momento debo especificar que soy de referencia para Magento 1.9.1.Esta función no está disponible en las versiones anteriores, creo.(de magento 1.7, campos múltiples de dependencia es posible, creo).

Y eso es todo.Este es el funcionamiento del campo de la dependencia es el procesamiento en magento.Usted obtendrá más detalles sobre el anterior enlace especificado.Acabo de hacer el punto claro.

para Magento 2.1.x, puede usar después de JQUERY para alternar grupos de configuración dependientes:

<comment><![CDATA[
<script type="text/javascript">//<![CDATA[
    require(['jquery'], function(){
        if (jQuery('#field_id').val() == 'value_to_compare') {
            toggleDependantGroups(true);
        }

        jQuery('#field_id').change(function() {
            if (jQuery(this).val() == 'value_to_compare') {
                toggleDependantGroups(true);
            } else {
                toggleDependantGroups(false);
            }
        });

        function toggleDependantGroups(hide=true)
        {
            if (hide) {
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#section-id').closest('div.section-config').hide();
                jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '0px');
            } else {
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#section-id').closest('div.section-config').show();
            jQuery('#last-visible-section-id').closest('div.section-config').css('border-bottom-width', '1px');
            }
        }
    });
</script>]]>

Reemplazar IDS donde sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top