Ajuda · Listagens

Filtro avançado: o usuário monta o próprio filtro

Com o Filtro avançado, quem usa o sistema monta a busca que precisa, sem pedir uma tela nova: escolhe a coluna, o operador e o valor, combina quantas condições quiser e salva o filtro para usar de novo. Você decide no MadBuilder quais colunas ficam disponíveis.

Editor → selecione a grade → Filtro avançado No app: botão Filtros da listagem Mad Framework 5.94.0 ou superior
00

O que você vai obter

Listagem de clientes no app gerado, com três condições montadas pelo usuário. Exemplo com dados fictícios.

app › Clientes
Painel Filtrar registros aberto sobre a listagem de clientes, com três condições: Categoria é um dos Revenda e Distribuidor, Cidade contém Curitiba, Cadastro no período Últimos 90 dias (28/06/2026 a 25/09/2026); o botão Aplicar mostra 1 registro
Filtrar registros. Cada linha é uma condição. O botão Aplicar já mostra quantos registros o filtro vai trazer.

O caminho completo tem quatro passos:

  1. No editor, selecione a grade da listagem e ligue o Filtro avançado (01).
  2. Libere as colunas que o usuário pode filtrar e ajuste o tipo de cada uma, se precisar (02–04).
  3. Clique em Testar agora ou republique o projeto (06).
  4. No app, o usuário clica em Filtros, monta as condições e aplica (07).
01

Ligar na listagem

Editor da página de listagem → clique na grade → painel de propriedades → seção Filtro avançado

Abra a listagem no editor e clique na grade. No painel de propriedades aparece a seção Filtro avançado, logo abaixo de Regras de carregamento e Filtros, desligada.

O link Como funciona abre este guia numa aba do editor.

Propriedades › Grid
Painel de propriedades da grade com as seções Regras de carregamento, Filtros e Filtro avançado; no Filtro avançado, o interruptor Permitir que o usuário final filtre está desligado
Seção Filtro avançado, desligada.

Ligue Permitir que o usuário final filtre. As colunas da grade entram na lista de uma vez, cada uma com o tipo certo (texto, número, data, Sim/Não, tabela relacionada), e o canvas passa a mostrar o botão Filtros na barra da grade, com o número de colunas liberadas.

Studio › ClienteList › Propriedades
Filtro avançado ligado: a lista de colunas liberadas mostra Nome, E-mail, Cidade, Categoria, Cadastro, Limite de crédito e Ativo, e o canvas mostra o botão Filtros na barra da grade
Ligado. Cada linha mostra o rótulo, a coluna do banco, o tipo e quantos operadores o usuário vai ver. Desligar pede confirmação e remove as colunas liberadas.
DesfazerLigar, adicionar, remover ou reordenar colunas são um passo só de desfazer (⌘Z / Ctrl+Z).
02

Escolher as colunas

Seção Filtro avançado → Colunas liberadas

Só as colunas desta lista aparecem para o usuário. Você pode:

  • Usar colunas da grade: acrescenta as colunas da listagem que ainda não estão no filtro. Útil depois de adicionar uma coluna nova à grade.
  • Adicionar coluna: libera qualquer coluna da tabela, mesmo que ela não apareça na grade, inclusive de tabelas relacionadas, em até três níveis. No exemplo, Estado vem de cidade → estado → nome. O rótulo já nasce com o nome da tabela (Estado, não Nome); você pode trocá-lo no painel da coluna.
  • Reordenar com as setas (a ordem é a da lista de colunas que o usuário vê) e remover com a lixeira.
Filtro avançado › Adicionar coluna
Seletor Adicionar coluna aberto com a busca estado, listando as colunas da tabela Estado alcançadas pela relação: cidade → estado → id, nome e sigla
Adicionar coluna. Colunas de tabelas relacionadas aparecem pelo caminho da relação.
Libere só o que faz sentido filtrarCada coluna liberada é uma escolha a mais para o usuário. Prefira as que respondem perguntas do dia a dia (cidade, situação, período, responsável) e deixe de fora identificadores internos e colunas técnicas.
03

Configurar cada coluna

Clique numa coluna da lista → abre o painel da coluna (← volta para o Filtro avançado)

O painel da coluna tem o rótulo que o usuário vê, o tipo e os operadores permitidos. O tipo decide o campo de valor que aparece no app e quais operadores fazem sentido:

TipoCampo de valor no appQuando usar
TextoCaixa de textoNome, e-mail, descrição, código.
NúmeroCaixa numérica (ou duas, no entre)Quantidade, valor, limite.
Data / Data e horaCalendário, intervalo ou período prontoCadastro, vencimento, emissão.
Sim/NãoBotões Sim e NãoAtivo, pago, bloqueado. Informe o que o banco grava (por exemplo S/N).
Opções fixasLista com as opções que você digitarSituação com poucos valores fixos.
Combo de tabelaLista com os registros de outra tabela, com buscaCategoria, tipo, responsável.
Busca no bancoBusca enquanto digitaTabelas grandes (clientes, produtos).

Em Operadores permitidos, desmarque o que não faz sentido para aquela coluna. Com todos marcados, o usuário vê todos os operadores do tipo. Pelo menos um precisa ficar marcado.

Filtro avançado › Categoria
Painel da coluna Categoria com o tipo Combo de tabela, os operadores permitidos marcados e a fonte das opções apontando para a tabela categoria_cliente
Coluna de relação. Uma chave estrangeira vira Combo de tabela, já apontando para a tabela e a coluna de texto da relação.
Filtro avançado › Cadastro
Painel da coluna Cadastro com o tipo Data e a lista de operadores: é em, antes de, depois de, entre, período, está vazio e não está vazio
Coluna de data. Os nomes dos operadores são os mesmos que o usuário vê no app.
04

Opções do filtro

Seção Filtro avançado → Opções

Abaixo das colunas liberadas fica o bloco Opções: filtros salvos, quem pode compartilhar, a lógica inicial, o máximo de condições e o texto do botão. A tabela a seguir explica cada uma.

Filtro avançado › Opções
Bloco Opções com Filtros salvos, Quem pode compartilhar, Lógica inicial, Máximo de condições e Texto do botão
Opções. Os valores padrão atendem a maioria das telas.
OpçãoO que fazPadrão
Filtros salvosPessoais e compartilhados: cada usuário salva os seus e pode compartilhar. Só pessoais: sem compartilhamento. Desligado: sem o menu Meus filtros.Pessoais e compartilhados
Quem pode compartilharAdministradores ou Todos os usuários. Quem não pode compartilhar salva o filtro como pessoal.Administradores
Lógica inicialComo as condições começam combinadas: Todas ou Qualquer uma. O usuário pode trocar ao filtrar.Todas
Máximo de condiçõesQuantas condições cabem num filtro, de 1 a 20.15
Texto do botãoO texto do botão na listagem.Filtros
05

O código gerado

Aba Blade da página — para quem prefere editar o código ou pedir ao agente de IA

O painel grava um bloco <mad-custom-filters> dentro da <mad-grid>, com uma tag <mad-custom-filter> por coluna liberada. Você pode editar direto no código: o painel lê o que estiver ali.

Studio › ClienteList › Blade
Aba Blade da listagem mostrando o bloco mad-custom-filters dentro da mad-grid, com uma tag mad-custom-filter por coluna
Blade. O mesmo conteúdo do painel, em código.
<mad-grid self per-page="15">
    <mad-columns> … </mad-columns>

    <mad-custom-filters save="shared" match="all">
        <mad-custom-filter field="{nome}" label="Nome" />
        <mad-custom-filter field="{cidade->nome}" label="Cidade" />
        <mad-custom-filter field="{cidade->estado->nome}" label="Estado" />
        <mad-custom-filter field="{categoria_cliente_id}" label="Categoria" type="dbcombo"
                           model="CategoriaCliente" display="{nome}" />
        <mad-custom-filter field="{data_cadastro}" label="Cadastro" type="date" />
        <mad-custom-filter field="{limite_credito}" label="Limite de crédito" type="number" />
        <mad-custom-filter field="{ativo}" label="Ativo" type="bool" true="S" false="N" />
        <mad-custom-filter field="{situacao}" label="Situação" type="select"
                           opts="A:Ativo|B:Bloqueado" ops="=,in" />
    </mad-custom-filters>
</mad-grid>
AtributoOndeO que faz
savecontainershared (padrão), user ou off — os filtros salvos.
sharecontaineradmin (padrão) ou everyone — quem pode compartilhar.
matchcontainerall (padrão) ou any — a lógica inicial.
maxcontainerMáximo de condições, até 20. Padrão 15.
labelcontainerTexto do botão. Padrão: Filtros.
fieldcolunaA coluna filtrada. Aceita relação: {cidade->estado->nome}, até três níveis.
labelcolunaO nome da coluna para o usuário.
typecolunatext (padrão), number, date, datetime, bool, select, dbcombo, dbsearch.
opscolunaOperadores permitidos, separados por vírgula. Sem o atributo: todos do tipo.
model, display, order-bycolunaFonte das opções de dbcombo e dbsearch.
opts / :optscolunaOpções de select: A:Ativo|B:Bloqueado ou um array PHP.
true, falsecolunaO que o banco grava em Sim e Não (padrão 1 e 0).
Pedindo ao agenteNo agente de IA, peça por exemplo: "na listagem de clientes, deixe o usuário filtrar por nome, cidade, estado, categoria e data de cadastro". Ele grava o mesmo bloco.
06

Publicar e testar

Rail → Teste online → Testar agora

Com o Teste Online já ligado, salvar a página atualiza o app sozinho: o indicador Test Online · há instantes, no topo do editor, confirma a sincronização. Na primeira vez, clique em Testar agora; para os clientes, republique o projeto na hospedagem. O botão Filtros aparece na listagem do app.

Studio › Teste online
Aviso Teste Online publicado, com o botão Abrir aplicação
Testar agora. Leva alguns segundos e mantém os dados de teste.
07

No sistema: montar o filtro

App → listagem → botão Filtros (ao lado de exportar e colunas)

app › Clientes
Listagem de clientes no app com o botão Filtros na barra da grade, ao lado da busca
Botão Filtros. Quando há condições ativas, o botão mostra quantas são.

O painel abre vazio, com sugestões prontas feitas a partir das colunas liberadas. Clique numa sugestão ou em Adicionar condição.

app › Clientes › Filtros
Painel Filtrar registros vazio, com o texto Nenhuma condição ainda e sugestões como Cadastro nos últimos 30 dias, Ativo é Sim e Categoria é um dos
Sem condições. As sugestões já chegam com o operador escolhido.

Cada condição tem três partes: a coluna, o operador e o valor. A lista de colunas tem busca e agrupa as colunas de tabelas relacionadas.

app › Clientes › Filtros
Lista de colunas aberta com a busca preenchida, mostrando a coluna Estado agrupada sob Cidade com o caminho cidade, estado, nome
Escolher a coluna. Digite parte do nome; use as setas e Enter para escolher pelo teclado.
08

Operadores e valores

Os operadores mudam conforme o tipo da coluna, para o usuário nunca ver uma opção que não faz sentido. O desenvolvedor pode esconder alguns (03).

Tipo da colunaOperadores
Textocontém · não contém · é igual a · é diferente de · começa com · termina com · é um dos · está vazio · não está vazio
Númeroé igual a · é diferente de · maior que · maior ou igual a · menor que · menor ou igual a · entre · é um dos · está vazio · não está vazio
Dataé em · antes de · depois de · entre · período · está vazio · não está vazio
Sim/Nãoé (Sim ou Não)
Opções fixasé · não é · é um dos · não é nenhum dos
Tabela relacionadaé · não é · é um dos · não é nenhum dos · está vazio · não está vazio

Períodos prontos

O operador período oferece: Hoje, Ontem, Esta semana, Semana passada, Este mês, Mês passado, Este ano, Ano passado, Últimos 7, 30 e 90 dias, Próximos 7 e 30 dias. As datas exatas aparecem embaixo do campo.

O período acompanha o calendárioUm filtro salvo com "Últimos 30 dias" é recalculado a cada vez que é usado: amanhã ele traz os 30 dias até amanhã.

"É um dos": vários valores de uma vez

Digite um valor e tecle Enter para virar etiqueta, ou cole uma lista separada por vírgula, ponto e vírgula ou quebra de linha, como 3, 7, 12, 21: cada valor vira uma etiqueta. Backspace no campo vazio remove a última.

app › Clientes › Filtros
Condição Código é um dos com várias etiquetas criadas a partir de uma lista colada
Lista colada. Cada valor vira uma etiqueta removível.
09

Aplicar e ver o resultado

Enquanto você monta o filtro, o botão Aplicar mostra quantos registros ele vai trazer. Clique em Aplicar (ou ⌘ Enter / Ctrl+Enter): o painel fecha, a listagem é filtrada e cada condição vira uma etiqueta acima da grade.

app › Clientes
Listagem filtrada com a barra Filtros aplicados mostrando as três condições como etiquetas removíveis e o botão Filtros com o número 3
Filtro aplicado. Clique numa etiqueta para editar aquela condição; o × remove só ela; Limpar filtros remove todas.

Se uma condição ficar sem valor, o painel não aplica: a linha fica em vermelho com Informe um valor e o cursor vai direto para ela.

app › Clientes › Filtros
Condição sem valor destacada em vermelho com a mensagem Informe um valor
Condição incompleta.
A exportação segue o filtroExportar para Excel, CSV ou PDF traz os mesmos registros que a tela está mostrando, com o filtro avançado aplicado. O filtro também soma com a busca e com os filtros de coluna da grade.
10

Todas ou qualquer uma

No topo do painel, escolha se o registro precisa atender a todas as condições ou a qualquer uma delas. A palavra no começo de cada linha mostra a lógica em uso (e ou ou) e também troca a lógica quando clicada.

app › Clientes › Filtros
Painel com qualquer uma selecionado e as condições ligadas por ou
Qualquer uma. Traz os clientes que atendem a pelo menos uma das condições. Com o filtro aplicado, as etiquetas começam com Qualquer uma:.
11

Filtros salvos

Painel Filtros → Meus filtros (canto inferior esquerdo)

Um filtro que o usuário usa sempre pode ser salvo com um nome. O menu Meus filtros separa os filtros da pessoa dos compartilhados por outros usuários.

app › Clientes › Filtros
Menu Meus filtros aberto com um filtro pessoal e, em Compartilhados, um filtro de outra usuária
Meus filtros. Clique num filtro para aplicá-lo. A estrela marca o filtro que abre junto com a tela.

Em Salvar filtro atual…, dê um nome e escolha:

  • Compartilhar com todos: todos que usam esta tela passam a ver o filtro. Aparece para quem pode compartilhar (04).
  • Abrir a tela com este filtro: a listagem já abre filtrada para você.
app › Clientes › Filtros
Formulário Salvar filtro atual com o nome Revendas do Sul, as opções Compartilhar com todos e Abrir a tela com este filtro marcadas e o aviso de que o filtro compartilhado vale para todos
Salvar. Com as duas opções marcadas, o painel avisa que o filtro vale para todos. Salvar com um nome que já existe atualiza aquele filtro.
Filtro padrão da equipeUm filtro compartilhado e marcado para abrir a tela com este filtro vira o filtro inicial de todos que usam a tela e não marcaram um filtro próprio. Um filtro pessoal marcado tem prioridade. Para a tela voltar a abrir sem filtro, desmarque a estrela no menu Meus filtros.

Com um filtro salvo em uso, o botão da listagem mostra o nome dele. Se o usuário mudar alguma condição, o painel marca o filtro como alterado; basta salvar de novo com o mesmo nome.

app › Clientes
Listagem com o botão mostrando o nome do filtro salvo Revendas do Sul e as etiquetas das condições
Filtro salvo em uso.
Quem pode apagarCada usuário apaga os próprios filtros. Um filtro compartilhado só pode ser apagado por quem o criou ou por um administrador.
12

Celular e tema escuro

No celular, o painel sobe da parte de baixo da tela e cada condição vira um cartão, com o botão Aplicar ocupando a largura toda.

O filtro segue a cor do tema do projeto e o modo escuro do app.

app › Clientes (celular)
Painel de filtros no celular, aberto de baixo para cima, com as condições em cartões e o botão Aplicar ocupando a largura toda
No celular.
app › Clientes (tema escuro)
Painel de filtros no tema escuro do app
Tema escuro.
13

O que o usuário pode filtrar

  • Só as colunas liberadas. O usuário não consegue filtrar por uma coluna que você não liberou, nem forjando a requisição: o servidor confere coluna, operador e valor em toda consulta e ignora o que não estiver na lista.
  • Só os registros que a tela já mostra. O filtro avançado restringe a listagem; ele não passa por cima das regras de carregamento, das permissões nem da separação por unidade ou empresa.
  • Filtros salvos acompanham a tela. Se você remover uma coluna do filtro avançado, os filtros salvos que a usavam continuam funcionando sem aquela condição, e o usuário vê um aviso.
14

Qual filtro usar

A listagem tem três formas de filtrar, e elas podem ser usadas juntas:

RecursoQuem define as condiçõesMelhor para
Filtro avançadoO usuário, com as colunas que você liberouBuscas variadas, que cada pessoa monta do seu jeito e pode salvar.
Filtros da listagem (Filtrar)Você: campos fixos numa barra, gaveta ou lateralOs dois ou três filtros que todo mundo usa, sempre à vista.
Filtro da coluna (Listagem)O usuário, no cabeçalho de cada colunaUm ajuste rápido numa coluna que está na grade.
15

Problemas comuns

O que aparecePor quêO que fazer
O botão Filtros não aparece no appO app ainda não recebeu a página nova, ou o framework do app é anterior ao 5.94.0.Clique em Testar agora ou republique o projeto.
O botão aparece, mas a lista de colunas está vaziaNenhuma coluna foi liberada.Em Filtro avançado, clique em Usar colunas da grade ou Adicionar coluna.
Uma coluna mostra o aviso "Coluna não encontrada no modelo"A coluna foi renomeada ou removida da tabela.Escolha a coluna de novo no painel da coluna ou remova-a da lista.
Aviso "Condições ignoradas" ao abrir um filtro salvoO filtro usava uma coluna que não está mais liberada.Ajuste as condições e salve de novo com o mesmo nome.
O usuário não vê a opção de compartilharO compartilhamento está limitado aos administradores.Em Opções, mude Quem pode compartilhar para Todos os usuários.
Sim/Não não encontra nadaO banco grava valores diferentes de 1/0.No painel da coluna, preencha Valor de Sim e Valor de Não (por exemplo S e N).