web-dev-qa-db-fra.com

Filtrer les valeurs de champs de formulaire par langue

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?

1
Nagarjun

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.

1
Nagarjun

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é

0
itsam