¿Cómo establecer el valor predeterminado para los campos de formulario?

18

Tengo un campo de formulario de administrador (cuadro 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',
      ));

Necesito establecer un valor predeterminado para este campo de texto. Lo intenté, estableciéndolo 'value' => '120',. Pero no 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', 
      ));

¿Cómo establecer un valor de defalt en ese campo?

Vishnu Renku
fuente
1
Compruebe que no se trata de un problema de caché del navegador. Tengo varias veces, especialmente en Firefox, que está almacenando en caché los últimos valores.
Tobias
55
¿Ha verificado que no está haciendo setValues ​​en el formulario después de la definición del campo? Si lo hace y el objeto utilizado (o la matriz) está vacío, se borran todos los valores.
Petar Dzhambazov
1
@ Peter- ¡Sí! ¡Era el problema ...! Gracias, estaba usando setValues..
Vishnu Renku

Respuestas:

7

¿Se muestra el campo de texto en sí? La configuración me 'value' => '120'parece correcta.

Anna Völkl
fuente
si. se muestra :(
Vishnu Renku
55
@Anna Völkl: tienes razón, pero si el addValues()método se usa después, esos valores se están reescribiendo.
user487772
11

Su problema es que los valores que establece con el addField()método se sobrescriben con el addValues()método que intenta configurar los valores de los campos de un formulario cuando el formulario se usa para editar entidades existentes o se produce un error durante el envío.

Aquí hay una solución alternativa. Lo más probable es que obtenga valores con un 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;
}

Entonces, dentro de su _prepareForm()método, reemplaza:

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

con:

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

Gracias a todos por dedicar su valioso tiempo y esfuerzo. Estaba usando setValues()después addfields. Entonces, los valores predeterminados se estaban borrando.

Lo supero proporcionando un ifbucle, como:

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

120 es mi tiempo predeterminado aquí.

Vishnu Renku
fuente
por favor vea la edición de mi respuesta.
user487772
1

Para cualquiera que busque y esté trabajando en 1.9 y tenga lo siguiente

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

Puede hacer lo siguiente sin tener que editar sus datos existentes, justo encima de ese lugar de código:

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

Por supuesto, puede verificar isset y tal, pero aquí está la versión básica de la configuración predeterminada.

usuario3740400
fuente
0

Puedes usar

$data['ajax_time_interval'] = 120;

donde $dataes una matriz de campos de formulario.

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

=> Puede agregar el atributo 'predeterminado' en los campos del formulario. Me gusta esto :

        $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
fuente
No está funcionando
Hemant Sankhla