如何设置表单字段的默认值?


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

如何在该字段中设置默认值?


1
检查这不是浏览器缓存问题。我度过了这个服务器时代,尤其是在Firefox中,它正在缓存最新值。
Tobias

5
您是否已确定在字段定义后不对表单执行setValues?如果这样做并且使用的对象(或数组)为空,则将清除所有值。
Petar Dzhambazov

1
@ Peter-是的!这是问题所在...!谢谢,我在用setValues..
Vishnu Renku

Answers:



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 2013年

1

对于正在寻找1.9并正在从事以下工作的任何人

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

您可以执行以下操作,而无需编辑您位于该代码位置上方的现有数据:

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

当然,您可以检查isset等,但这是设置默认值的基本版本。



0

=>您可以在表单字段中添加“默认”属性。像这样 :

        $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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.