web-dev-qa-db-fra.com

Liste de filtrage des utilisateurs dans le type de champ de formulaire Utilisateur

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?

3
GDP

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:

  • INT: un entier,
  • UINT: Un entier non signé,
  • FLOAT: Un nombre à virgule flottante,
  • BOOLEAN: une valeur booléenne,
  • Word: une chaîne contenant uniquement des lettres Z ou des traits de soulignement (non sensible à la casse),
  • ALNUM: une chaîne contenant uniquement A-Z ou 0-9 (non sensible à la casse),
  • CMD: chaîne contenant A à Z, 0 à 9, traits de soulignement, points ou traits d'union (non sensible à la casse),
  • BASE64: Une chaîne contenant A à Z, 0 à 9, barres obliques, plus ou égales (non sensible à la casse),
  • STRING: Une chaîne entièrement décodée et assainie (par défaut),
  • HTML: une chaîne désinfectée,
  • TABLEAU: Un tableau,
  • PATH: un chemin de fichier désinfecté,
  • USERNAME: ne pas utiliser (utiliser un filtre spécifique à l'application),
  • RAW: la chaîne brute est renvoyée sans filtrage.
  • unknown: Un filtre inconnu agira comme STRING. Si l'entrée est un tableau, elle retournera un tableau de chaînes entièrement décodées et assainies.

à partir du code source de Joomla

4
Florian

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

4
Christelle

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

1
Almika