web-dev-qa-db-fra.com

Tableau de forme 3.x?

Existe-t-il un moyen d'avoir le même champ dans un tableau lors de la publication des données? Comme j'ai besoin que les onglets de mon composant soient générés de manière dynamique en fonction de la sortie des requêtes, je ne peux pas les entrer spécifiquement dans ce fichier.

models/forms/myform.xml

<fieldset name="myset"
    <field name="language" type="language" class="hidden" ...>
    <field name="sometext" type="text" ...>
/>

voir/ma vue/tmpl/default.php

foreach ($langs as $lang)
{
    /* html */
    $this->form->setFieldAttribute('language', 'default', $lang['name']);
    echo $this->form->renderFieldSet('myset');
    /* html */
}

aboutirait à dire ceci:

| Anglais | Allemand | Le français |

avec un champ de langue et de texte sur chaque onglet. Le problème ici est que lors de la publication, il ne fait que publier le dernier état, ce serait le contenu de "français". Alors, y a-t-il un moyen de résoudre ce problème et de faire en sorte que joomla envoie un tableau ou de meilleures solutions à ce problème?

En outre, y a-t-il un moyen de dire à Joomla de mettre ces données dans un stdObject car tout élément de ce champs est lié?

1
Vic

Plusieurs champs portant le même nom

multiple="true" signifie que votre seul champ peut avoir plusieurs valeurs, et non que vous pouvez avoir plusieurs champs portant le même nom.

Vous devez créer champ de formulaire personnalisé pour obtenir plusieurs zones de texte ou sélections portant le même nom.

Comme il suffit d'ajouter [] à la fin du nom du champ, extendJFormFieldTextarea et JFormFieldList. Il ne reste plus qu’à copier-coller les fonctions getInput existantes et à ajouter [] après $this->name.

Ces classes sont situées à libraries/joomla/form/fields, des dossiers list.php et textarea.php.

Regroupement

La seule façon de regrouper des données liées est d’ajouter <fieldset></fieldset> en <fields></fields>

Exemple de Joomla! coeur com_content article.xml:

<fields name="attribs" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
  <fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
    <field
      name="show_title"
      type="list"
      class="chzn-color"
      label="JGLOBAL_SHOW_TITLE_LABEL"
      description="JGLOBAL_SHOW_TITLE_DESC">
      <option value="">JGLOBAL_USE_GLOBAL</option>
      <option value="1">JSHOW</option>
      <option value="0">JHIDE</option>
    </field>
</fields>

Maintenant, la sortie serait.

<select id="jform_attribs_show_title" name="jform[attribs][show_title]" class="chzn-color chzn-done" style="display: none;">
  <option value="" selected="selected">Use Global</option>
  <option value="1">Show</option>
  <option value="0">Hide</option>
</select>

Tout fields dans ce fieldset sera dans jform[attribs]. <fields> attribut name serait array clé.

En fin de compte, vous allez vous retrouver avec quelque chose comme ça.

<fields name="grouped">
  <fieldset name="myset"
      <field name="language" type="mycustomlanguage" class="hidden" ...>
      <field name="sometext" type="mycustomtext" ...>
  />
</fields>
0
Rene Korss

Ajouter multiple="true" dans le champ xml

<field name="language" type="language" class="hidden" multiple="true" ...>

1
Gaurav