web-dev-qa-db-fra.com

Champs dynamiques personnalisés - SimpleXMLElement dans les champs d'informations de modèle et de données

Bonjour,

J'ai une question. Je crée mes propres champs dans mon propre composant. J'utilise la classe "SimpleXMLElement". Le formulaire généré via getForm fonctionne parfaitement:

$newfieldset = new SimpleXMLElement('<fieldset></fieldset>');
$newfieldset->addAttribute('name', 'case_customfields');

foreach($customfields as $customfield) 
{
    $field = $newfieldset->addChild('field');
    $field->addAttribute('name', $customfield->field_name . '-' . $customfield->id);
    $field->addAttribute('type', $customfield->field_type);
    $field->addAttribute('default', $customfield->field_default_value);
    $field->addAttribute('label', $customfield->field_label);
    $field->addAttribute('description', $customfield->field_description);

}

$form->setField($newfieldset);

return $form;  

J'ai également modifié la fonction getItem, qui renvoie des valeurs pour mes propres champs:

    $customfields_value = $this->getCustomFieldsValues($pk);

    foreach($customfields_value as $customfield_value) 
    {
        $singleCustomField = $this->getSingleCustomFields($customfield_value->custom_fields_id);
        $field_id = $singleCustomField['id'];
        $field_name = $singleCustomField['field_name'];

        $field = $field_name . '-' . $field_id;
        $item->$field = $customfield_value->value;

    }

    return $item;

Fonctionne parfaitement aussi.

Le problème est que dans le formulaire de modification, je ne vois pas de valeurs personnalisées. Si je crée un formulaire statique en XML (modèles/formulaires), les données sont. Pour les champs créés via "SimpleXMLElement", les données ne sont pas dans le formulaire.

Bien sûr, je peux charger des données dans le formulaire via la classe "SimpleXMLElement" dans getForm, mais cela me semble être un mauvais moyen.

Où est-ce que je fais une erreur? Et merci d'avance pour l'aide.

1
K.I.D.

Ma faute. Mauvais ordre. Corectly est: 1. Tout d’abord - créer un formulaire et le transformer en SimpleXMLElement

$ formXml = new SimpleXMLElement (file_get_contents (JPATH_COMPONENT.'path vers le fichier xml '));

  1. Ajouter un élément enfants pour former
  2. Convertir SimpleXMLElement en nouveau XML
  3. Nouveau XML (avec enfants) sous forme de $ formulaire
  4. Formulaire de retour
1
K.I.D.