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


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

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 и тому подобное, но вот базовая версия настроек по умолчанию.


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

Это не работает
Хемант Санхла
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.