it-swarm-es.tech

Lista de filtrado de usuarios en el tipo de campo de formulario de usuario

No he podido determinar si/cómo se puede filtrar la lista de usuarios. El siguiente ejemplo de Tipo de campo de formulario de usuario , muestra el filtro en uso, pero no he podido encontrar cómo especificar los grupos que se incluirán en la lista.

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

Sin duda, si tiene miles de usuarios, esta lista se puede reducir a un grupo de usuarios en particular de alguna manera: ¿me equivoco en esa suposición?

3
GDP

Simplemente podrías usar

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

Crea un campo modal que muestra una lista de usuarios que puede filtrar por grupo seleccionando el cuadro combinado en la parte superior derecha de la ventana modal.

Si necesita un cuadro combinado simple y no le importa tener el grupo de usuarios codificado, puede usar

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

Y reemplace 8 por la identificación del grupo de usuarios que elija.

EDITAR: La función del atributo de filtro no es filtrar los valores mostrados del campo. Es más una función de limpieza que procesa el valor de entrada después de que se envía el formulario. En este caso, tiene poco uso ya que el campo 'usuario' solo puede generar una identificación de usuario, pero en un campo de texto puede usar el filtro 'INT' para asegurarse de que el usuario ingrese un número.

Los valores disponibles para el atributo de filtro son:

  • INT: un entero,
  • UINT: un entero sin signo,
  • FLOTADOR: un número de coma flotante,
  • BOOLEAN: un valor booleano,
  • Palabra: una cadena que contiene A-Z o solo guiones bajos (no distingue entre mayúsculas y minúsculas),
  • ALNUM: una cadena que contiene A-Z o 0-9 solamente (no distingue entre mayúsculas y minúsculas),
  • CMD: una cadena que contiene A-Z, 0-9, guiones bajos, puntos o guiones (no distingue entre mayúsculas y minúsculas),
  • BASE64: una cadena que contiene A-Z, 0-9, barras diagonales, más o igual (no distingue entre mayúsculas y minúsculas),
  • STRING: una cadena totalmente decodificada y desinfectada (predeterminada),
  • HTML: una cadena desinfectada,
  • ARRAY: una matriz,
  • RUTA: una ruta de archivo desinfectada,
  • NOMBRE DE USUARIO: No use (use un filtro específico de la aplicación),
  • RAW: la cadena sin procesar se devuelve sin filtrado,
  • desconocido: un filtro desconocido actuará como STRING. Si la entrada es una matriz, devolverá una matriz de cadenas completamente decodificadas y desinfectadas.

Del código fuente de Joomla

4
Florian

De hecho, es muy fácil filtrar la lista de usuarios en el tipo de campo de formulario Usuario.

Primero en su manifiesto, debe crear un nuevo tipo para su campo, por ejemplo userFiltering (ver más abajo)

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

En el conjunto de campos del manifiesto, agregue el atributo 'addfieldpath' con la ruta de su nueva declaración de tipo de campo (ver más abajo)

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

Finalmente en la ruta "/ administrator/components/com_mycomponent/models/fields", cree un archivo userfiltering.php con el siguiente código

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

Eso es todo

4
Christelle

Acabo de encontrar una nueva opción en Joomla 3.8.2. El tipo de campo "usuario" tiene la opción "grupos".

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

Tal vez sea útil para alguien

1
Almika