Как я могу динамически генерировать XML-форму формы из PHP?

У меня есть требование создать страницу /форму, основанную на списке элементов пользователя. Как есть, пользователь может указать список элементов, которые имеют текстовое описание элемента, и является ли это типом поля text или list. ( Представьте список оборудования, которое можно проверить, а список предметов для проверки зависит от типа оборудования. Конечно, есть некоторые общие элементы, но они различаются от типа оборудования, модели и т. д. ). Таким образом, вместо простой загрузки существующего XML-файла из папки models\forms\ и запуска с ним, можно добавить новый набор полей и ряд новых полей на лету.

Если да,

  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);
7 голосов | спросил GDP 29 62014vEurope/Moscow11bEurope/MoscowSat, 29 Nov 2014 19:27:40 +0300 2014, 19:27:40

1 ответ


2

Я работал с jForm и методами setField() и getFieldset(), чтобы установить и получить поля, но Joomla выбрасывает ошибки , При попытке добавить список list Joomla не смог разобрать 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*/
ответил GDP 29 62014vEurope/Moscow11bEurope/MoscowSat, 29 Nov 2014 20:19:05 +0300 2014, 20:19:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132