Jak ustawić wartość domyślną dla pól formularza?

18

Mam pole formularza administratora (pole tekstowe),

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

Muszę ustawić wartość domyślną dla tego pola tekstowego. Próbowałem, ustawiając 'value' => '120',to. Ale to nie działa.

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

Jak ustawić wartość defalt w tym polu?

Wisznu Renku
źródło
1
Sprawdź, czy nie jest to problem z pamięcią podręczną przeglądarki. Mam takie czasy serwerowe, szczególnie w Firefoksie, który buforuje najnowsze wartości.
Tobias
5
Czy sprawdziłeś, że nie wykonujesz setValues ​​w formularzu po zdefiniowaniu pola? Jeśli to zrobisz, a użyty obiekt (lub tablica) jest pusty, wówczas wszystkie wartości zostaną usunięte.
Petar Dzhambazov
1
@ Peter- Tak! To był problem ...! Dzięki, setValues
używałem

Odpowiedzi:

7

Czy samo pole tekstowe jest wyświetlane? To ustawienie 'value' => '120'wydaje mi się prawidłowe.

Anna Völkl
źródło
tak. jest wyświetlany. :(
Vishnu Renku
5
@Anna Völkl: masz rację, ale jeśli addValues()później zostanie użyta metoda, te wartości zostaną przepisane.
user487772
11

Problem polega na tym, że wartości ustawione za pomocą addField()metody są następnie zastępowane addValues()metodą, która próbuje skonfigurować wartości pól formularza, gdy formularz jest używany do edycji istniejących elementów lub wystąpił błąd podczas przesyłania.

Oto obejście. Najprawdopodobniej otrzymujesz wartości za pomocą chronionej metody, takiej jak ta:

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

W ramach tej _prepareForm()metody zastępujesz:

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

z:

$_data = $this->__getFormData();
if (!empty($_data)) {
    $form->addValues($_data);
}
użytkownik487772
źródło
2

Dziękujemy wszystkim za poświęcenie cennego czasu i wysiłku. Używałem setValues()później addfields. Tak więc wartości domyślne zostały usunięte.

Przezwyciężam go, tworząc ifpętlę, taką jak:

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

120 to mój domyślny czas tutaj.

Wisznu Renku
źródło
proszę zobaczyć edycję mojej odpowiedzi.
user487772
1

Dla każdego, kto szuka i pracuje nad wersją 1.9 i ma poniższe

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

Możesz wykonać następujące czynności bez konieczności edytowania istniejących danych, tuż nad tym miejscem kodu:

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

Oczywiście możesz sprawdzić isset i takie, ale oto podstawowa wersja ustawień domyślnych.

użytkownik3740400
źródło
0

Możesz użyć

$data['ajax_time_interval'] = 120;

gdzie $datajest tablica pól formularza.

$data['{field_name}'] = '{field_name}';
Anshu Mishra
źródło
0

=> Możesz dodać atrybut „default” w polach formularza. Lubię to :

        $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
źródło
To nie działa
Hemant Sankhla