Comment définir la valeur par défaut des champs de formulaire?


18

J'ai un champ de formulaire d'administration (zone de texte),

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

Je dois définir une valeur par défaut pour ce champ de texte. J'ai essayé, m'y installant 'value' => '120',. Mais ça ne marche pas.

$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', 
      ));

Comment définir une valeur par défaut dans ce domaine?


1
Vérifiez qu'il ne s'agit pas d'un problème de cache du navigateur. J'ai ce temps serveur, en particulier dans Firefox, qui met en cache les dernières valeurs.
Tobias

5
Avez-vous vérifié que vous ne définissez pas setValues ​​sur le formulaire après la définition du champ? Si vous le faites et que l'objet utilisé (ou tableau) est vide, toutes les valeurs sont effacées.
Petar Dzhambazov

1
@ Peter- Oui! C'était le problème ...! Merci, j'utilisais setValues..
Vishnu Renku

Réponses:


7

Le champ de texte lui-même est-il affiché? Le cadre 'value' => '120'me semble correct.


Oui. il s'affiche. :(
Vishnu Renku

5
@Anna Völkl: vous avez raison mais si la addValues()méthode est utilisée par la suite, ces valeurs sont en cours de réécriture.
user487772

11

Votre problème est que les valeurs que vous définissez avec la addField()méthode sont ensuite remplacées par la addValues()méthode qui tente de configurer les valeurs des champs d'un formulaire lorsque le formulaire est utilisé pour modifier des entités existantes ou qu'une erreur s'est produite lors de la soumission.

Voici une solution de contournement. Vous obtenez probablement des valeurs avec une méthode protégée comme celle-ci:

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;
}

Donc, à l'intérieur de votre _prepareForm()méthode, vous remplacez:

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

avec:

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

2

Merci à tous d'avoir consacré votre temps et vos efforts précieux. J'utilisais setValues()après addfields. Les valeurs par défaut étaient donc effacées.

Je l'ai surmonté en fournissant une ifboucle, telle que:

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

120 est mon heure par défaut ici.


veuillez voir la modification de ma réponse.
user487772

1

Pour tous ceux qui recherchent et travaillent sur 1.9 et ont ce qui suit

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

Vous pouvez effectuer les opérations suivantes sans avoir à modifier vos données existantes, juste au-dessus de cet emplacement de code:

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

Bien sûr, vous pouvez vérifier isset et autres, mais voici la version de base de la définition des valeurs par défaut.


0

Vous pouvez utiliser

$data['ajax_time_interval'] = 120;

$dataest un tableau de champs de formulaire.

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

0

=> Vous pouvez ajouter l' attribut 'default' dans les champs du formulaire. Comme ça :

        $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', 
  ));

Ça ne marche pas
Hemant Sankhla
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.