Wie setze ich einen Standardwert für Formularfelder?

18

Ich habe ein Admin-Formularfeld (Textfeld)

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

Ich muss einen Standardwert für dieses Textfeld festlegen. Ich habe es versucht und mich 'value' => '120',darauf eingestellt. Aber es funktioniert nicht.

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

Wie lege ich einen Defalt-Wert in diesem Feld fest?

Vishnu Renku
quelle
1
Stellen Sie sicher, dass es sich nicht um ein Browser-Cache-Problem handelt. Ich habe dies mehrere Male, besonders in Firefox, wo die neuesten Werte zwischengespeichert werden.
Tobias
5
Haben Sie überprüft, ob Sie nach der Felddefinition setValues ​​für das Formular nicht ausführen? Wenn Sie dies tun und das verwendete Objekt (oder Array) leer ist, werden alle Werte gelöscht.
Petar Dzhambazov
1
@ Peter- Ja! Es war das Problem ...! Danke, ich war mit setValues..
Vishnu Renku

Antworten:

7

Wird das Textfeld selbst angezeigt? Die Einstellung 'value' => '120'scheint mir richtig zu sein.

Anna Völkl
quelle
Ja. es wird angezeigt. :(
Vishnu Renku
5
@Anna Völkl: Sie haben Recht, aber wenn die addValues()Methode danach verwendet wird, werden diese Werte umgeschrieben.
User487772
11

Ihr Problem ist, dass Werte, die Sie mit addField()Methode festlegen, dann mit Methode überschrieben addValues()werden, die versucht, Werte für Formularfelder einzurichten, wenn Formular zum Bearbeiten vorhandener Entitäten verwendet wird oder ein Fehler während der Übermittlung aufgetreten ist.

Hier ist eine Problemumgehung. Höchstwahrscheinlich erhalten Sie Werte mit einer geschützten Methode wie der folgenden:

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

Also _prepareForm()ersetzen Sie innerhalb Ihrer Methode:

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

mit:

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

Vielen Dank für Ihre wertvolle Zeit und Mühe. Ich habe setValues()danach verwendet addfields. Also wurden die Standardwerte gelöscht.

Ich überwinde es, indem ich eine ifSchleife bereitstelle , wie zum Beispiel:

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

120 ist meine Standardzeit hier.

Vishnu Renku
quelle
Bitte beachten Sie die Bearbeitung zu meiner Antwort.
User487772
1

Für alle die suchen und an 1.9 arbeiten und folgendes haben

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

Sie können Folgendes tun, ohne Ihre vorhandenen Daten direkt über dieser Codestelle bearbeiten zu müssen:

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

Natürlich können Sie isset und so überprüfen, aber hier ist die Grundversion der Standardeinstellungen.

user3740400
quelle
0

Sie können verwenden

$data['ajax_time_interval'] = 120;

wo $dataist ein Array von Formularfeldern.

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

=> Sie können ein Standardattribut in Formularfelder einfügen. So was :

        $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
quelle
Es funktioniert nicht
Hemant Sankhla