Как установить значение по умолчанию для полей формы?

18

У меня есть поле формы администратора (текстовое поле),

$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',в нем. Но это не работает.

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

Как установить значение defalt в этом поле?

Вишну Ренку
источник
1
Убедитесь, что это не проблема кеша браузера. У меня есть это несколько раз, особенно в Firefox, который кэширует последние значения.
Тобиас
5
Проверено ли, что вы не используете setValues ​​в форме после определения поля? Если вы делаете, и используемый объект (или массив) пуст, то все значения очищаются.
Петар Джамбазов
1
@ Питер. Это была проблема ...! Спасибо, я использовал setValues..
Вишну Ренку

Ответы:

7

Отображается ли само текстовое поле? Настройка 'value' => '120'кажется мне правильной.

Анна Фёлькл
источник
да. это отображается. :(
Вишну Ренку
5
@ Анна Фёлькль: вы правы, но если addValues()метод будет использован впоследствии, эти значения будут переписаны.
user487772
11

Ваша проблема заключается в том, что значения, которые вы устанавливаете с помощью addField()метода, затем перезаписываются addValues()методом, который пытается установить значения полей формы, когда форма используется для редактирования существующих объектов или произошла ошибка во время отправки.

Вот обходной путь. Скорее всего, вы получаете значения с помощью защищенного метода, подобного этому:

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

Итак, внутри вашего _prepareForm()метода вы заменяете:

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

с:

$_data = $this->__getFormData();
if (!empty($_data)) {
    $form->addValues($_data);
}
user487772
источник
2

Спасибо всем за ваше драгоценное время и усилия. Я использовал setValues()после addfields. Значения по умолчанию были очищены.

Я преодолел это, предоставив ifцикл, такой как:

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

120 мое время по умолчанию здесь.

Вишну Ренку
источник
пожалуйста, смотрите редактирование моего ответа.
user487772
1

Для тех, кто ищет и работает на 1.9 и ниже

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

Вы можете сделать следующее, не редактируя существующие данные, прямо над этим местом кода:

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

Конечно, вы можете проверить isset и тому подобное, но вот базовая версия настроек по умолчанию.

user3740400
источник
0

Ты можешь использовать

$data['ajax_time_interval'] = 120;

где $dataмассив полей формы.

$data['{field_name}'] = '{field_name}';
Аншу Мишра
источник
0

=> Вы можете добавить атрибут 'default' в поля формы. Как это :

        $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
источник
Это не работает
Хемант Санхла