วิธีการตั้งค่าเริ่มต้นสำหรับเขตข้อมูลฟอร์ม?


18

ฉันมีเขตข้อมูลฟอร์มผู้ดูแลระบบ (กล่องข้อความ)

$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',มัน แต่มันไม่ทำงาน

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

จะตั้งค่า defalt ในฟิลด์นั้นได้อย่างไร?


1
ตรวจสอบว่าไม่ใช่ปัญหาแคชของเบราว์เซอร์ ฉันมีเวลาเซิร์ฟเวอร์นี้โดยเฉพาะอย่างยิ่งใน Firefox ซึ่งแคชค่าล่าสุด
โทเบียส

5
คุณตรวจสอบแล้วว่าคุณไม่ได้ทำ setValues ​​ในแบบฟอร์มหลังจากการกำหนดเขตข้อมูลหรือไม่? หากคุณทำและวัตถุที่ใช้ (หรืออาร์เรย์) ว่างเปล่าค่าทั้งหมดจะถูกล้าง
Petar Dzhambazov

1
@ Peter- Yess! มันเป็นปัญหา ... ! ขอบคุณฉันใช้setValues..
Vishnu Renku

คำตอบ:


7

ฟิลด์ข้อความแสดงขึ้นมาเองหรือไม่? การตั้งค่า'value' => '120'ดูเหมือนถูกต้องสำหรับฉัน


ใช่. มันจะปรากฏขึ้น :(
Vishnu Renku

5
@Anna Völkl: คุณพูดถูก แต่ถ้าaddValues()ใช้วิธีการหลังจากนั้นค่าเหล่านั้นจะถูกเขียนใหม่
user487772

11

ปัญหาของคุณคือค่าที่คุณตั้งค่าด้วยaddField()วิธีนั้นจะถูกเขียนทับด้วยaddValues()วิธีที่พยายามตั้งค่าค่าเขตข้อมูลฟอร์มเมื่อใช้แบบฟอร์มสำหรับการแก้ไขเอนทิตีที่มีอยู่หรือข้อผิดพลาดเกิดขึ้นระหว่างการส่ง

นี่คือวิธีแก้ปัญหา เป็นไปได้มากว่าคุณจะได้รับค่าด้วยวิธีการป้องกันเช่นนี้

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

ดังนั้นภายใน_prepareForm()วิธีการของคุณคุณแทนที่:

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

ด้วย:

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

2

ขอบคุณทุกคนที่สละเวลาอันมีค่าและความพยายามของคุณ ผมใช้หลังจากsetValues() addfieldsดังนั้นค่าเริ่มต้นจะถูกล้าง

ฉันเอาชนะมันได้โดยเตรียมifลูปเช่น:

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

120คือเวลาเริ่มต้นของฉันที่นี่


โปรดดูการแก้ไขคำตอบของฉัน
user487772

1

สำหรับใครที่กำลังมองหาและกำลังทำงานบน 1.9 และมีดังต่อไปนี้

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

คุณสามารถทำสิ่งต่อไปนี้ได้โดยไม่ต้องแก้ไขข้อมูลที่มีอยู่เหนือรหัสสถานที่:

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

แน่นอนคุณสามารถตรวจสอบผู้ออกและเช่นนี้เป็นรุ่นพื้นฐานของการตั้งค่าเริ่มต้น


0

คุณสามารถใช้ได้

$data['ajax_time_interval'] = 120;

ที่$dataเป็นอาร์เรย์ของเขตข้อมูลแบบฟอร์ม

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

0

=> คุณสามารถเพิ่มแอตทริบิวต์'เริ่มต้น'ในฟิลด์แบบฟอร์ม แบบนี้ :

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

มันไม่ทำงาน
Hemant Sankhla
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.