ti-enxame.com

Filtrando a lista de Usuários no tipo de campo de formulário Usuário

Não foi possível determinar se/como a lista de usuários pode ser filtrada. O exemplo abaixo de Tipo de campo do formulário de usuário , mostra o filtro em uso, mas não consegui descobrir como especificar os grupos a serem incluídos na lista.

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

Certamente, se você tiver milhares de usuários, essa lista poderá ser reduzida a um grupo de usuários específico - estou errado nessa suposição?

3
GDP

Você poderia simplesmente usar

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

Ele cria um campo modal que exibe uma lista de usuários que você pode filtrar por grupo, selecionando a caixa de combinação no canto superior direito da janela modal.

Se você precisa de uma caixa de combinação simples e não se importa de ter o grupo de usuários codificado, pode 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"
                />

E substitua 8 pelo ID do grupo de usuários de sua escolha.

EDIT: A função do atributo de filtro não é filtrar os valores exibidos do campo. É mais uma função de limpeza que processa o valor de entrada após o formulário ser enviado. Nesse caso, ele tem pouco uso, pois o campo 'usuário' pode gerar apenas uma identificação de usuário, mas em um campo de texto você pode usar o filtro 'INT' para garantir que o usuário insira um número.

Os valores disponíveis para o atributo filter são:

  • INT: Um número inteiro,
  • UINT: um número inteiro não assinado,
  • FLOAT: um número de ponto flutuante,
  • BOOLEAN: Um valor booleano,
  • Palavra: uma sequência que contém A-Z ou apenas sublinhados (não diferencia maiúsculas de minúsculas),
  • ALNUM: uma string contendo apenas A-Z ou 0-9 (não diferencia maiúsculas de minúsculas),
  • CMD: uma sequência que contém A-Z, 0-9, sublinhados, pontos ou hífens (não diferencia maiúsculas de minúsculas),
  • BASE64: uma sequência que contém A-Z, 0-9, barras, mais ou igual (sem distinção entre maiúsculas e minúsculas),
  • STRING: uma sequência totalmente decodificada e higienizada (padrão),
  • HTML: uma sequência higienizada,
  • ARRAY: Uma matriz,
  • CAMINHO: um caminho de arquivo higienizado,
  • USERNAME: não use (use um filtro específico do aplicativo),
  • RAW: a cadeia bruta é retornada sem filtragem,
  • desconhecido: um filtro desconhecido atuará como STRING. Se a entrada for uma matriz, ela retornará uma matriz de seqüências de caracteres totalmente decodificadas e higienizadas.

A partir do código fonte do Joomla

4
Florian

De fato, é muito fácil filtrar a lista de usuários no tipo de campo Formulário do usuário.

Primeiro no seu manifesto, você deve criar um novo tipo para o seu campo, por exemplo, userFiltering (veja abaixo)

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

No conjunto de campos do manifesto, adicione o atributo 'addfieldpath' ao caminho da sua nova declaração de tipo de campo (veja abaixo)

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

Finalmente no caminho "/ administrator/components/com_mycomponent/models/fields", crie um arquivo userfiltering.php com o código abaixo

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

Isso é tudo

4
Christelle

Acabei de encontrar uma nova opção no Joomla 3.8.2. O tipo de campo "usuário" tem a opção "grupos".

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

Talvez seja útil para alguém

1
Almika