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?


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.


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

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.


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.


0

Sie können verwenden

$data['ajax_time_interval'] = 120;

wo $dataist ein Array von Formularfeldern.

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

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

Es funktioniert nicht
Hemant Sankhla
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.