2014-04-14 11 views
8

Prima di tutto ho già visto questa domanda can a magento adminhtml field depend on more then one field or value? Si parla di campi Sistema/Configurazione, che non è quello che sto cercando.Il campo di amministrazione di Magento dipende da più di un valore o campo?

Sto provando a creare un modulo nel backend di Magento. Ho un dropdown Dropdown con valori 1, 2 e 3. Ho bisogno che il campo X venga visualizzato quando seleziono 1 o 2. Come faccio a fare questo?

Sono in grado di visualizzare X in base a un singolo valore del menu a discesa, non per più valori.

Ecco come ho fatto:

$this->setChild('form_after',$this->getLayout()->createBlock('adminhtml/widget_form_element_dependence') 
      ->addFieldMap($X->getHtmlId(), $Xl->getName()) 
      ->addFieldMap($dropdown->getHtmlId(), $dropdown->getName()) 
      ->addFieldDependence($X->getName(), $dropdown->getName(), 1) 
); 

Dove $x e $dropdown sono variabili che memorizza addField() risultato

+2

Avete provato con l'ultimo parametro di 'addFieldDependence' impostato su un array? Intendo '-> addFieldDependence ($ X-> getName(), $ dropdown-> getName(), array (1,2))'. – Marius

+1

Grazie per aver risposto Marius. L'ho provato ora, non funziona. Non mostra affatto il campo. –

risposta

-1

fix semplice per questo sarebbe quella di utilizzare jQuery nella sezione amministrativa.

  1. include file jquery nella sezione amministrativa, si esegue questa operazione, includendo questo nel file di layout

<reference name = "head"> 
 
    <action method="addJs"><script>jquery/jquery.js</script></action> 
 
    <action method="addJs"><script>jquery/jquery.noconflict.js</script></action> 
 
</reference>

  1. Poi nel admin modifica il codice del modulo, fai clic su:
$fieldset->addField('market_days', 'multiselect', array(
          'label'  => Mage::helper('marketmanagement')->__('Select Days'), 
          'class'  => 'required-entry market-days', 
          'required' => true, 
          'name'  => 'market_days', 
          'onclick' => ""//jquery code here 
)); 

È possibile scrivere il codice jQuery per mostrare/nascondere i campi in base al valore selezionato.

Spero che questo aiuti

+0

Questa non è una risposta corretta ... Magento lo consente già, non è necessario aggiungere jquery – WonderLand

9

È possibile.

più campi:
Basta aggiungere più dipendenza:

->addFieldDependence($X->getName(), $dropdown_1->getName(), $value_dw_1) 
->addFieldDependence($X->getName(), $dropdown_2->getName(),$value_dw_2) 

More valori (stesso campo):
Si dovrebbe passare un array di valori:

->addFieldDependence($X->getName(), $dropdown->getName(), array($value1,value2)) 

se $value1/$value2 sono numeri è meglio che li si passi alla stringa o che non sia possibile funzionare correttamente:

->addFieldDependence($X->getName(), $dropdown->getName(), array((string)$value1,(string)value2)) 

C'è ragione di questo problema può essere rintracciato nel js/mage/adminhtml/form.js nel metodo trackChange a un certo punto si vede questo codice:

... 
// define whether the target should show up 
    var shouldShowUp = true; 
    for (var idFrom in valuesFrom) { 
     var from = $(idFrom); 
     if (valuesFrom[idFrom] instanceof Array) { 
      if (!from || valuesFrom[idFrom].indexOf(from.value) == -1) { 
       shouldShowUp = false; 
      } 
     } else { 
      if (!from || from.value != valuesFrom[idFrom]) { 
       shouldShowUp = false; 
      } 
     } 
    } 
.... 

si vede che nel caso in cui valuesFrom[idFrom] viene utilizzato indexOf per verificare se mostrare il campo o no, questo causa problemi perché, pensa, indexOf fare un confronto prendendosi cura del tipo e from.value contiene una stringa mentre nell'array valuesFrom[idFrom] abbiamo una matrice di numeri ...

Questo problema si verifica in caso di un singolo valore perché from.value != valuesFrom[idFrom] non si prende cura del tipo

Problemi correlati