J'ai une exigence spécifique consistant à afficher uniquement les catégories de la langue du menu sélectionnée. Donc, dans ma composante, j'ai le champ déclaré comme ci-dessous.
<field name="catid" type="categoryedit" label="JCATEGORY" description="JFIELD_CATEGORY_DESC" class="inputbox input-block-level" required="true"></field>
Et dans mon modèle, je règle l'attribut de champ de manière dynamique en fonction de la langue du menu.
public function getForm ($data = array(), $loadData = true)
{
....
$language = JFactory::getLanguage()->getTag();
$form->setFieldAttribute('catid', 'language', $language);
....
}
Cela fonctionne parfaitement bien. Cependant, le seul problème est qu’il affiche uniquement la liste qui ne concerne que la langue sélectionnée. Par exemple, en-GB n’affiche que la liste des valeurs attribuées à la langue en-GB.
Je dois afficher toutes les valeurs de champ attribuées à la langue sélectionnée ainsi que "Toutes" (ou "*", c'est-à-dire qu'aucune langue n'est sélectionnée).
Je ne peux pas définir deux valeurs sur le même attribut de champ, le paramétrant deux fois pour écraser le poing.
$form->setFieldAttribute('catid', 'language', '*');
Ça ne marche pas du tout
$form->setFieldAttribute('catid', 'language', $language.', *');
Quelqu'un a une idée de comment puis-je faire cela?
Après de nombreuses recherches, je n'ai pas trouvé de solution possible à cela. J'ai donc remplacé le type de champ categoryedit et modifié le code suivant dans la méthode getOptions (le champ peut être créé dans le répertoire models/fields de votre composant afin qu'il puisse être référencé dans votre formulaire xml)
// Filter language
if (!empty($this->element['language']))
{
$subQuery->where('language = ' . $db->quote($this->element['language']));
}
à
// Filter language
$languages = array(JFactory::getLanguage()->getTag(), '*');
if (!empty($this->element['language']))
{
$languages[] = $this->element['language'];
}
$subQuery->where('language IN (' . implode(',', $db->quote($languages)).')');
J'espère que cela aidera tous ceux qui recherchent une solution similaire.
Vous pouvez simplement changer la définition de votre champ xml (models/forms/yourform.xml) pour inclure l'option supplémentaire comme ceci:
<field name="catid" type="contentlanguage" label="yourlabel"
description="yourdescription">
<option value="*">JALL</option></field>
JALL sera automatiquement traduit dans votre langue "Tous" Word.
J'espère que ça t'as aidé