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é?
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, extend
JFormFieldTextarea
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>
Ajouter multiple="true"
dans le champ xml
<field name="language" type="language" class="hidden" multiple="true" ...>