Come impostare il valore predefinito per i campi modulo?


18

Ho un campo modulo amministratore (casella di testo),

$fieldset->addField('ajax_time_interval', 'text', array(
          'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
          'class'     => 'required-entry',
          'required'  => true,
          'name'      => 'ajax_time_interval',
      ));

Devo impostare un valore predefinito per questo campo di testo. Ci ho provato, mettendoci 'value' => '120',dentro. Ma non funziona.

$fieldset->addField('ajax_time_interval', 'text', array(
          'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
          'class'     => 'required-entry',
          'required'  => true,
          'name'      => 'ajax_time_interval',
          'value'     => '120', 
      ));

Come impostare un valore di defalt in quel campo?


1
Verifica che non si tratti di un problema con la cache del browser. Ho questi tempi serverali, specialmente in Firefox, che memorizza nella cache gli ultimi valori.
Tobias,

5
Hai verificato che non stai eseguendo setValues ​​sul modulo dopo la definizione del campo? Se lo fai e l'oggetto usato (o l'array) è vuoto, tutti i valori vengono cancellati.
Petar Dzhambazov,

1
@ Peter- Sì! Era il problema ...! Grazie, stavo usando setValues..
Vishnu Renku,

Risposte:


7

Viene visualizzato il campo di testo stesso? L'impostazione 'value' => '120'mi sembra corretta.


sì. viene visualizzato. :(
Vishnu Renku,

5
@Anna Völkl: hai ragione ma se il addValues()metodo viene usato in seguito, quei valori vengono riscritti.
user487772

11

Il problema è che i valori impostati con il addField()metodo vengono quindi sovrascritti con il addValues()metodo che tenta di impostare i valori dei campi di un modulo quando il modulo viene utilizzato per modificare entità esistenti o si è verificato un errore durante l'invio.

Ecco una soluzione alternativa. Molto probabilmente stai ottenendo valori con un metodo protetto come questo:

protected function _getFormData()
{
    $data = Mage::getSingleton('adminhtml/session')->getFormData();

    if (!$data && Mage::registry('current_osmm_project')->getData()) {
        $data = Mage::registry('current_osmm_project')->getData();
    }

    return (array) $data;
}

Quindi all'interno del tuo _prepareForm()metodo sostituisci:

$form->addValues($this->_getFormData());

con:

$_data = $this->__getFormData();
if (!empty($_data)) {
    $form->addValues($_data);
}

2

Grazie a tutti per aver speso tempo prezioso e fatica. Stavo usando setValues()dopo addfields. Quindi i valori predefiniti venivano cancellati.

L'ho superato fornendo un ifciclo, come ad esempio:

if (Mage::registry('dealroom_data')->getAjaxTimeInterval() < 0 || Mage::registry('dealroom_data')->getAjaxTimeInterval() == "") {
    Mage::registry('dealroom_data')->setAjaxTimeInterval(120);
}

120 è il mio tempo predefinito qui.


si prega di vedere la modifica alla mia risposta.
user487772

1

Per chiunque cerchi e lavori su 1.9 e abbia il seguito

if($model){
    $form->setValues($model->getData());
}

Puoi fare quanto segue senza dover modificare i tuoi dati esistenti, appena sopra quel codice:

if($model->getData('fieldName') == ""){
    $model->setData('fieldName', "yourValue");
}

Ovviamente puoi controllare isset e simili, ma qui è la versione base dell'impostazione di default.


0

Puoi usare

$data['ajax_time_interval'] = 120;

dove si $datatrova una matrice di campi modulo.

$data['{field_name}'] = '{field_name}';

0

=> È possibile aggiungere l' attributo 'predefinito' nei campi del modulo. Come questo :

        $fieldset->addField('ajax_time_interval', 'text', array(
      'label'     => Mage::helper('dealroom')->__('Page Refresh Time Interval'),
      'class'     => 'required-entry',
      'required'  => true,
      'name'      => 'ajax_time_interval',
      'default'     => '120', 
  ));

Non funziona
Hemant Sankhla,
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.