Je suis incapable de déterminer si/comment la liste des utilisateurs peut être filtrée. L'exemple ci-dessous de type de champ de formulaire utilisateur , montre le filtre utilisé, mais je n'ai pas pu trouver comment spécifier les groupes à inclure dans la liste.
<field name="modified_user_id" type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
class="readonly"
readonly="true"
filter="unset" />
Certes, si vous avez des milliers d'utilisateurs, cette liste peut être réduite à un groupe d'utilisateurs particulier - est-ce que je me trompe dans cette hypothèse?
Vous pouvez simplement utiliser
<field name="modified_user_id"
type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
desc="A_DESCRIPTION_IS_ALWAYS_GOOD"/>
Il crée un champ modal qui affiche une liste d'utilisateurs que vous pouvez filtrer par groupe en sélectionnant la liste déroulante en haut à droite de la fenêtre modale.
Si vous avez besoin d’une simple liste déroulante et que le groupe d’utilisateurs est codé en dur, vous pouvez utiliser
<field name="modified_user_id_2"
type="sql"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
desc=""
query="SELECT u.id , u.name FROM #__users as u inner join #__user_usergroup_map AS ugm ON ugm.user_id = u.id where ugm.group_id=8"
multiple="single"
key_field="id"
value_field="name"
/>
Et remplacez 8 par l'identifiant du groupe d'utilisateurs de votre choix.
EDIT: La fonction de l'attribut de filtre n'est pas de filtrer les valeurs affichées du champ. Il s’agit plus d’une fonction de nettoyage qui traite la valeur d’entrée après le formulaire est soumis. Dans ce cas, il est peu utile, car le champ "utilisateur" ne peut afficher qu'un identifiant d'utilisateur, mais dans un champ de texte, vous pouvez utiliser le filtre "INT" pour vous assurer que l'utilisateur entre un nombre.
Les valeurs disponibles pour l'attribut filter sont:
En fait, il est très facile de filtrer la liste des utilisateurs dans le type de champ de formulaire Utilisateur.
Tout d'abord dans votre manifeste, vous devez créer un nouveau type pour votre champ, par exemple userFiltering (voir ci-dessous).
<field
name="myUser"
type="userFiltering"
label="LABEL"
description="DESCRIPTION"
/>
Dans l'ensemble de champs du manifeste, ajoutez l'attribut 'addfieldpath' avec le chemin de votre nouvelle déclaration de type de champ (voir ci-dessous).
<fieldset addfieldpath="/administrator/components/com_mycomponent/models/fields">
Enfin dans le chemin "/ administrateur/composants/com_mycomponent/models/fields", créez un fichier userfiltering.php avec le code ci-dessous
defined('JPATH_BASE') or die();
class JFormFieldUserfiltering extends JFormFieldUser {
public $type = 'userfiltering';
protected function getGroups()
{
$groups = array();
$groups[] = 11; // put here the list of the groups you want to filter
return $groups;
}
}
C'est tout
Je viens de trouver une nouvelle option dans Joomla 3.8.2. Le type de champ "utilisateur" a l'option "groupes".
<field
name="partner_id"
type="user"
label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
groups="10"
required="true"/>
Peut-être que ce sera utile pour quelqu'un