Як встановити значення за замовчуванням для полів форми?


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

Відповіді:


7

Чи відображається саме текстове поле? Налаштування 'value' => '120'здається мені правильним.


так. він відображається. :(
Vishnu Renku

5
@Anna Völkl: ти маєш рацію, але якщо 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");
}

Звичайно, ви можете перевірити набір і таке, але ось основна версія налаштування за замовчуванням.


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

Це не працює
Hemant Sankhla
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.