मैं PHP से गतिशील रूप से XML का निर्माण कैसे कर सकता हूं?


10

मुझे उपयोगकर्ता की वस्तुओं की सूची के आधार पर एक पृष्ठ / प्रपत्र उत्पन्न करने की आवश्यकता है। जैसा कि, उपयोगकर्ता उन मदों की एक सूची निर्दिष्ट कर सकता है, जिसमें आइटम का एक पाठ विवरण होता है, और यह एक textया listफ़ील्ड प्रकार है। ( उन उपकरणों की एक सूची की कल्पना करें जिन्हें चेक किया जा सकता है, और जाँचने के लिए वस्तुओं की सूची उपकरण के प्रकार से भिन्न होती है। निश्चित रूप से कुछ साझा किए गए आइटम हैं, लेकिन वे उपकरण के प्रकार, मॉडल आदि से भिन्न होते हैं )। इसलिए, models\forms\फ़ोल्डर से एक मौजूदा XML फ़ाइल को बस लोड करने और उसके साथ चलने के बजाय , एक नया फ़ील्ड और नए फ़ील्ड की एक श्रृंखला को फ्लाई पर जोड़ा जा सकता है।

यदि ऐसा है तो,

  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()सेट करने के लिए और क्षेत्रों को पुनः प्राप्त है, लेकिन जूमला त्रुटियों फेंक दिया गया था। एक listजूमला जोड़ने की कोशिश करते समय मैं 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*/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.