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?

Vishnu Renku
la source
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.

Anna Völkl
la source
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);
}
user487772
la source
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.

Vishnu Renku
la source
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.

user3740400
la source
0

Vous pouvez utiliser

$data['ajax_time_interval'] = 120;

$dataest un tableau de champs de formulaire.

$data['{field_name}'] = '{field_name}';
Anshu Mishra
la source
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', 
  ));
apandey846
la source
Ça ne marche pas
Hemant Sankhla