it-swarm.dev

Elenco di filtri degli utenti nel tipo di campo Modulo utente

Non sono stato in grado di determinare se/come è possibile filtrare l'elenco di utenti. L'esempio seguente da Tipo di campo modulo utente , mostra il filtro in uso, ma non sono stato in grado di trovare il modo di specificare i gruppi da includere nell'elenco.

<field name="modified_user_id" type="user"
    label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
    class="readonly"
    readonly="true"
    filter="unset" />

Sicuramente, se hai migliaia di utenti, in qualche modo questo elenco può essere ridotto a un determinato gruppo di utenti - mi sbaglio in questo presupposto?

3
GDP

Potresti semplicemente usare

<field name="modified_user_id" 
  type="user"
  label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
  desc="A_DESCRIPTION_IS_ALWAYS_GOOD"/>

Crea un campo modale che visualizza un elenco di utenti che è possibile filtrare per gruppo selezionando la casella combinata in alto a destra nella finestra modale.

Se hai bisogno di una semplice casella combinata e non ti dispiace avere il gruppo di utenti hardcoded che puoi usare

<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"
                />

E sostituisci 8 con l'id del gruppo di utenti di tua scelta.

EDIT: la funzione dell'attributo filter non è quella di filtrare i valori visualizzati del campo. È più una funzione di pulizia che elabora il valore di input dopo il modulo viene inviato. In questo caso è poco utile poiché il campo "utente" può solo generare un ID utente, ma in un campo di testo è possibile utilizzare il filtro "INT" per assicurarsi che l'utente inserisca un numero.

I valori disponibili per l'attributo filtro sono:

  • INT: un numero intero,
  • UINT: un numero intero senza segno,
  • FLOAT: un numero in virgola mobile,
  • BOOLEANO: un valore booleano,
  • Parola: una stringa contenente solo A-Z o caratteri di sottolineatura (senza distinzione tra maiuscole e minuscole),
  • ALNUM: una stringa contenente solo A-Z o 0-9 (senza distinzione tra maiuscole e minuscole),
  • CMD: una stringa contenente A-Z, 0-9, trattini bassi, punti o trattini (senza distinzione tra maiuscole e minuscole),
  • BASE64: una stringa contenente A-Z, 0-9, barre in avanti, più o uguale a (maiuscole e minuscole),
  • STRING: una stringa completamente decodificata e disinfettata (impostazione predefinita),
  • HTML: una stringa disinfettata,
  • ARRAY: un array,
  • PERCORSO: un percorso di file sanificato,
  • NOME UTENTE: non utilizzare (utilizzare un filtro specifico per l'applicazione),
  • RAW: la stringa non elaborata viene restituita senza filtro,
  • sconosciuto: un filtro sconosciuto agirà come STRING. Se l'input è un array, verrà restituito un array di stringhe completamente decodificate e sterilizzate.

Dal codice sorgente di Joomla

4
Florian

In effetti, è molto semplice filtrare l'elenco degli utenti nel tipo di campo Modulo utente.

Per prima cosa nel tuo manifest dovresti creare un nuovo tipo per il tuo campo, ad esempio userFiltering (vedi sotto)

<field
        name="myUser"
        type="userFiltering"
        label="LABEL"
        description="DESCRIPTION"
/>

Nel fieldset del manifest, aggiungi l'attributo 'addfieldpath' con il percorso della nuova dichiarazione del tipo di campo (vedi sotto)

<fieldset addfieldpath="/administrator/components/com_mycomponent/models/fields">

Finalmente nel percorso "/ administrator/components/com_mycomponent/models/fields", crea un file userfiltering.php con il codice qui sotto

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;
}
} 

È tutto

4
Christelle

Ho appena trovato una nuova opzione in Joomla 3.8.2. Il tipo di campo "utente" ha l'opzione "gruppi".

<field
    name="partner_id"
    type="user"
    label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
    groups="10"
    required="true"/>

Forse sarà utile per qualcuno

1
Almika