Dipendenza dal campo system.xml


16

Quindi puoi impostare nel system.xmlfile di un modulo una dipendenza tra i campi aggiungendo un <depends>tag in uno dei campi.

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

Il codice sopra indica che field2verrà mostrato quando il valore di field1è 1. Voglio sapere come / se posso dire a Magento di mostrare field2se il valore di field1è 1OR 2?

Risposte:


29

Prova questo:

<depends>
    <field separator="|">
        <value>1|2|3</value>
    </field>
</depends>

Sai che funziona, o lo stai semplicemente facendo uscire?
benmarks

1
Amico ... Non so come, ma in realtà funziona. Ora mi vergogno e mi dispiace per tutte le mie parolacce che ho detto ai ragazzi che hanno implementato la sezione di configurazione. Per qualche motivo $dependent['separator']restituisce il valore dell'attributo separator. A chi lo ha mai votato per favore, per favore vota (due volte se possibile). Funziona perfettamente. Grazie. cc @benmarks
Marius

1
Questo lavoro! = È una buona idea. Penso che non sia necessario scusarsi per le tue parole :-D
benmarks,

7

[MODIFICARE]

Ho sbagliato nella mia risposta di seguito. Non lo cancellerò (ancora) perché ho ottenuto 7 voti positivi su questo :). Ma lo sto modificando in modo da avere tutti la possibilità di ritirare il tuo voto (anche ridimensionarlo, perché me lo merito).

Risposta originale

Ah! .. L'ho trovato.
Risposta breve: non puoi!
Risposta lunga : dovresti essere in grado di farlo se qualcuno avesse conosciuto la differenza tra un array e un oggetto.
In teoria questo dovrebbe funzionare

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

Ma nel codice che gestisce la dipendenza, Mage_Adminhtml_Block_System_Config_Form::initFieldsattorno alla riga 366 c'è questo codice

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

$dependentè sempre un oggetto, quindi $dependent['separator']non è mai impostato.
Se cambio il codice sopra in

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

tutto funziona senza intoppi.
Immagino di non poter cambiare il core solo per il bene di un'estensione, quindi devo creare 2 campi invece di 1, uno per ogni valore da field1o creare un js personalizzato che lo gestisce e aggiungerlo alla pagina di configurazione.


2
Accidenti. Conosco questo tipo di bug :-) Spero che tu l'abbia segnalato? Ottima intuizione!
Fabian Blechschmidt,

1
Oh amico che è una grande indagine sei sicuro di non essere Sherlock? +1 per averlo segnalato.
David Manners,

2
@DavidManners elementare mio caro Watson
Marius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.