dependencia del campo system.xml

16

Por lo tanto, puede establecer en el system.xmlarchivo de un módulo una dependencia entre campos agregando una <depends>etiqueta en uno de los campos.

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>1</field1>
    </depends>
</field2>

El código anterior significa que field2se mostrará cuando el valor de field1es 1. Quiero saber cómo / si puedo decirle a Magento que muestre field2si el valor field1es 1OR 2.

Marius
fuente

Respuestas:

29

Prueba esto:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>
Alejandro
fuente
¿Sabes que esto funciona o simplemente lo estás exponiendo?
puntos de referencia
1
Amigo ... No sé cómo, pero esto realmente funciona. Ahora estoy avergonzado y lo siento por todas mis malas palabras que les dije a los chicos que implementaron la sección de configuración. Por alguna razón $dependent['separator']devuelve el valor del atributo separator. A quien haya votado en contra de esto, favor de votar (dos veces si es posible). Funciona perfectamente. Gracias. cc @benmarks
Marius
1
¡Esto funciona! = Es una buena idea. Creo que no hay necesidad de disculparse por sus palabras :-D
puntos de referencia
7

[EDITAR]

Me equivoqué en mi respuesta a continuación. No lo eliminaré (todavía) porque obtuve 7 votos a favor :). Pero lo estoy editando para que todos tengan la oportunidad de retractarse de su voto (incluso desestimarlo, porque me lo merezco).

Respuesta original

¡Ja! .. Lo encontré.
Respuesta corta: ¡ No puedes!
Respuesta larga : debería poder hacerlo si alguien hubiera sabido la diferencia entre una matriz y un objeto.
En teoría esto debería funcionar

<field1>
    ....
</field1>
<field2>
    ....
    <depends>
       <field1>
           <value>1|2</value>
           <separator>|</separator>
       </field1>
    </depends>
</field2>

Pero en el código que maneja la dependencia, Mage_Adminhtml_Block_System_Config_Form::initFieldsalrededor de la línea 366 hay este código

if (isset($dependent['separator'])) {
    $dependentValue = explode((string)$dependent['separator'], $dependentValue);
}

$dependentsiempre es un objeto, por $dependent['separator']lo que nunca se establece.
Si cambio el código anterior a

if (isset($dependent->separator)) {
    $dependentValue = explode((string)$dependent->separator, $dependentValue);
}

Todo funciona sin problemas.
Supongo que no puedo cambiar el núcleo solo por el bien de una extensión, así que tengo que crear 2 campos en lugar de 1, uno para cada valor field1o crear un js personalizado que maneje esto y agregarlo a la página de configuración.

Marius
fuente
2
Maldición. Conozco este tipo de errores :-) Espero que lo hayas informado. Gran idea!
Fabian Blechschmidt
1
Oh hombre, eso es una gran investigación, ¿estás seguro de que no eres Sherlock? +1 por informarlo.
David Manners
2
@DavidManners Elementary My Dear Watson
Marius