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?


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.


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

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.


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.


0

Możesz użyć

$data['ajax_time_interval'] = 120;

gdzie $datajest tablica pól formularza.

$data['{field_name}'] = '{field_name}';

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

To nie działa
Hemant Sankhla
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.