ฉันจะสร้าง XML ของแบบฟอร์มจาก PHP ได้อย่างไร


10

ฉันมีความต้องการในการสร้างหน้า / แบบฟอร์มตามรายการของผู้ใช้ ตามที่เป็นอยู่ผู้ใช้สามารถระบุรายการที่มีคำอธิบายข้อความของรายการและไม่ว่าจะเป็นประเภทtextหรือlistเขตข้อมูล ( ลองนึกภาพรายการของอุปกรณ์ที่สามารถเช็คเอาต์และรายการของรายการที่จะตรวจสอบแตกต่างกันไปตามประเภทของอุปกรณ์แน่นอนมีบางรายการที่ใช้ร่วมกัน แต่พวกเขาแตกต่างกันไปตามประเภทอุปกรณ์รุ่น ฯลฯ ) ดังนั้นแทนที่จะโหลดไฟล์ XML ที่มีอยู่จากmodels\forms\โฟลเดอร์และเรียกใช้งานมันสามารถตั้งค่า fieldset ใหม่และเพิ่มชุดของเขตข้อมูลใหม่ได้ทันที

ถ้าเป็นเช่นนั้น

  1. สำเร็จได้อย่างไร
  2. ที่ไหนจะเป็นสถานที่ที่ถูกต้องที่จะทำเพื่อให้ MVC ปฏิบัติต่อเหมือนอยู่ในรูปแบบ "มาตรฐาน" XML
  3. วิธีที่ดีที่สุดในการดึงรายการของเขตข้อมูลเหล่านั้นสำหรับการแสดงในมุมมอง?

รุ่น \ myform.php

$form = $this->loadForm('com_mycomponent.myform', 'myform', array('control' => 'jform', 'load_data' => $loadData));

ควบคุม / myform.php

// Get the user data.
$data = JFactory::getApplication()->input->get('jform', array(), 'array');

// Validate the posted data.
$form = $model->getForm();
if (!$form) {
    JError::raiseError(500, $model->getError());
    return false;
}
...
// Validate the posted data.
$data = $model->validate($form, $data);
...
// Attempt to save the data.
$return = $model->save($data);

คำตอบ:


4

ฉันกำลังทำงานกับjFormและวิธีการsetField()และgetFieldset()การตั้งค่าและเรียกคืนเขตข้อมูล แต่ Joomla ถูกทิ้งข้อผิดพลาด ขณะที่พยายามที่จะเพิ่มlistJoomla ก็ไม่สามารถที่จะแยกของ XML จนกว่าฉันจะเพิ่มและoption_on="Yes" option_off="Yes"( ฉันไม่แน่ใจว่าจำเป็นต้องใช้สิ่งใด / ทำไม แต่ด้วยรหัสเหล่านี้ทำงานได้ )

รุ่น \ myform.php

 public function getForm($data = array(), $loadData = true)
{
    // Get the form.
    $form = $this->loadForm('com_mycomponent.mymodel', 'myform', array('control' => 'jform', 'load_data' => $loadData));
    if (empty($form)) {
        return false;
    }
    $element = new SimpleXMLElement('<fieldset name="myFieldset">
        <field name="myfield1" type="list"
        label="My List"
        default="2"
        option_on="Yes"
        option_off="Yes">
        <option value="1">Low</option>
        <option value="2">Normal</option>
        <option value="3">High</option>
        </field>
        <field name="myfield2" type="text" label="My field 1" class="inputbox" size="30" />
        <field name="myfield3" type="text" label="My field 2" class="inputbox" size="30" />
    </fieldset>');
    $form->setField($element);
    return $form;
}

มุมมอง / MyView / tmpl / default.php

$this->form->getFieldset('myFieldset'), true)
// Loop through these results and display them accordingly
$myFieldset = $this->form->getFieldset('myFieldset');
if(count($myFieldset)){
    foreach($myFieldset as $field) {
        $field_name = $field->getAttribute('name');
        echo $this->form->getLabel($field_name);
        echo $this->form->getInput($field_name);
    }

}

ควบคุม / myview.php

// Get the user data.
$data = JFactory::getApplication()->input->get('jform', array(), 'array');
/* $data DOES contain my input fields*/
// The model/table doesn't contain columns for my custom fields, so the data to be saved has to be manipulated here to "go somewhere permanent".

// Validate the posted data.
$form = $model->getForm();
/* $form DOES contain my input fields*/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.