سؤال

I have an admin form field(textbox),

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

I need to set a default value for this text field. I tried, setting 'value' => '120', in it. But its not working.

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

How to set a defalt value in that field?

هل كانت مفيدة؟

المحلول

Is the textfield itself displayed? The setting 'value' => '120' seems correct to me.

نصائح أخرى

Your problem is that values you set with addField() method are then overwritten with addValues() method which tries to set up a form fields values when form is used for editing existing entities or error occurred during submission.

Here is a workaround. Most likely you are getting values with a protected method like this:

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

So inside of your _prepareForm() method you replace:

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

with:

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

Thanks everybody for spending your valuable time and effort. I was Using setValues() after addfields. So the default values were being cleared.

I overcome it by providing an if loop, such as:

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

120 is my default time here.

For anyone looking and are working on 1.9 and have the below

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

You can do the following without having to edit your existing data, just above that code place:

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

Of course you can check isset and such but here is the basic version of setting defaults.

You can use

$data['ajax_time_interval'] = 120;

where $data is an array of form fields.

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

=> You can add 'default' attribute in form fields. Like this :

        $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', 
  ));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top