Como definir o valor padrão para os campos do formulário?

18

Eu tenho um campo de formulário de administrador (caixa de texto),

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

Eu preciso definir um valor padrão para este campo de texto. Eu tentei, assentando 'value' => '120',nele. Mas não está funcionando.

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

Como definir um valor padrão no campo?

Vishnu Renku
fonte
11
Verifique se não é um problema de cache do navegador. Eu tenho esse tempo de servidor, especialmente no Firefox, que está armazenando em cache os valores mais recentes.
Tobias
5
Você verificou que não está fazendo setValues ​​no formulário após a definição do campo? Se você fizer e o objeto usado (ou matriz) estiver vazio, todos os valores serão limpos.
Petar Dzhambazov 06/02/2013
11
@ Peter- Yess! Foi o problema ...! Obrigado, eu estava usando setValues..
Vishnu Renku 06/02

Respostas:

7

O próprio campo de texto é exibido? A configuração 'value' => '120'parece correta para mim.

Anna Völkl
fonte
sim. é exibido. :(
Vishnu renku
5
@ Anna Völkl: você está certo, mas se o addValues()método for usado posteriormente, esses valores serão reescritos.
user487772
11

Seu problema é que os valores que você define com o addField()método são substituídos pelo addValues()método que tenta configurar os valores dos campos de um formulário quando o formulário é usado para editar entidades existentes ou ocorreu um erro durante o envio.

Aqui está uma solução alternativa. Provavelmente você está obtendo valores com um método protegido como este:

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

Então, dentro do seu _prepareForm()método, você substitui:

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

com:

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

Obrigado a todos por gastar seu valioso tempo e esforço. Eu estava usando setValues()depois addfields. Portanto, os valores padrão estavam sendo limpos.

Eu supero isso fornecendo um ifloop, como:

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

120 é o meu horário padrão aqui.

Vishnu Renku
fonte
por favor, veja a edição da minha resposta.
user487772
1

Para quem procura e está trabalhando no 1.9 e tem o seguinte

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

Você pode fazer o seguinte sem precisar editar os dados existentes, logo acima desse local do código:

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

Claro que você pode verificar o isset e tal, mas aqui está a versão básica da configuração de padrões.

user3740400
fonte
0

Você pode usar

$data['ajax_time_interval'] = 120;

onde $dataé uma matriz de campos de formulário.

$data['{field_name}'] = '{field_name}';
Anshu Mishra
fonte
0

=> Você pode adicionar o atributo 'padrão' nos campos do formulário. Como isso :

        $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
fonte
Não está funcionando
Hemant Sankhla 24/02