PHP에서 양식의 XML을 동적으로 생성하려면 어떻게해야합니까?


10

사용자의 항목 목록을 기반으로 페이지 / 양식을 생성해야합니다. 이기 때문에, 사용자는 항목의 텍스트 설명이 항목의 목록을 지정할 수 있습니다, 그리고 그것은 여부 text또는 list필드 유형. ( 체크 아웃 할 수있는 장비 목록과 점검 할 항목 목록은 장비 유형에 따라 다릅니다. 일부 공유 항목이 있지만 장비 유형, 모델 등에 따라 다릅니다 ). 따라서 단순히 models\forms\폴더 에서 기존 XML 파일을로드하여 실행 하는 대신 새 필드 세트와 일련의 새 필드를 즉시 추가 할 수 있습니다.

그렇다면,

  1. 그게 어떻게 이루어 집니까?
  2. MVC가 XML을 "표준"형식의 XML처럼 취급하도록 올바른 장소는 어디입니까?
  3. 보기에 표시하기 위해 해당 필드 목록을 검색하는 가장 좋은 방법은 무엇입니까?

models \ myform.php

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

controllers / 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()설정하고 필드를 검색하지만, 줌라 오류를 던지고 있었다. 추가하려고하는 동안 list줌라는 XML을 구문 분석 할 수 없습니다 때까지 내가 추가 option_on="Yes"하고 option_off="Yes". ( 어떻게 / 왜 이것이 필요한지 확실하지 않지만 아래 코드가 작동 합니다.)

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

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

}

controllers / 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.