PHP'den bir formun XML'ini dinamik olarak nasıl oluşturabilirim?


10

Kullanıcının öğe listesine göre bir sayfa / form oluşturmak için bir gereksinimim var. Olduğu gibi, kullanıcı öğenin metin açıklaması olan öğelerin bir listesini ve öğenin bir textveya listalan türü olup olmadığını belirtebilir . ( Kontrol edilebilen bir ekipman listesi düşünün ve kontrol edilecek öğelerin listesi ekipman türüne göre değişir. Kesinlikle bazı paylaşılan öğeler vardır, ancak ekipman türüne, modele vb . Göre değişir ). Dolayısıyla, varolan bir XML dosyasını models\forms\klasörden yüklemek ve onunla çalışmak yerine, anında yeni bir alan kümesi ve bir dizi yeni alan eklenebilir.

Öyleyse,

  1. Bu nasıl başarılır?
  2. MVC "standart" form XML sanki davranır böylece bunu yapmak için doğru yer nerede olurdu?
  3. Görünümde görüntülenmek üzere bu alanların bir listesini almak en iyi yöntemdir?

modeller \ myform.php

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

kontrolörleri / 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);

Yanıtlar:


4

Ben jFormve yöntemleri setField()ve getFieldset()alanları ayarlamak ve almak için çalışıyordu, ama Joomla hatalar atıyordu. listJoomla eklemeye çalışırken, ben ve ekleyene kadar XML ayrıştırılamadı . ( Bunların ne / neden gerekli olduğundan emin değilim, ancak onlarla birlikte, aşağıdaki kod çalışır ).option_on="Yes"option_off="Yes"

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

görünümler / 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);
    }

}

kontrolörleri / 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*/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.