Làm cách nào tôi có thể tự động tạo XML của biểu mẫu từ PHP?


10

Tôi có một yêu cầu để tạo một trang / biểu mẫu dựa trên danh sách các mục của người dùng. Như vậy, người dùng có thể chỉ định một danh sách các mục có mô tả văn bản của mục đó và cho dù đó là loại texthoặc listtrường. ( Hãy tưởng tượng một danh sách các thiết bị có thể được kiểm tra và danh sách các mục cần kiểm tra khác nhau tùy theo loại thiết bị. Chắc chắn có một số mục được chia sẻ, nhưng chúng khác nhau tùy theo loại thiết bị, kiểu máy, v.v. ). Vì vậy, thay vì chỉ tải một tệp XML hiện có từ models\forms\thư mục và chạy với nó, có thể thêm một bộ trường mới và một loạt các trường mới được thêm vào nhanh chóng.

Nếu vậy,

  1. Làm thế nào là hoàn thành?
  2. Đâu sẽ là nơi chính xác để làm điều đó để MVC xử lý nó như thể nó ở dạng XML "chuẩn"?
  3. Cách tốt nhất để truy xuất danh sách các trường đó để hiển thị trong Chế độ xem?

mô hình \ myform.php

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

bộ điều khiển / 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);

Câu trả lời:


4

Tôi đã làm việc với jFormvà các phương thức setField()getFieldset()để thiết lập và truy xuất các trường, nhưng Joomla đã bị lỗi. Trong khi cố gắng thêm một listJoomla đã không thể phân tích cú pháp XML cho đến khi tôi thêm option_on="Yes"option_off="Yes". ( Tôi không chắc chắn điều gì / tại sao những điều này là cần thiết, nhưng với chúng, đoạn mã dưới đây hoạt động ).

mô hình \ 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;
}

lượt xem / 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);
    }

}

bộ điều khiển / 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*/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.