Descrição do Problema / Contexto
Queremos expandir a plataforma adicionando a capacidade de busca textual de páginas do site. Para isso, precisamos criar dois novos módulos e seus respectivos widgets, baseados em estruturas de módulos existentes e consolidadas:
-
forms-search: Um módulo de formulários focado especificamente na captura de buscas textuais de páginas, baseado no módulo coreforms. -
pages-index: Um módulo de listagem/grade de páginas que exibe os resultados de busca e/ou as páginas ativas do sistema, baseado no módulopublisher-index.
A estratégia de desenvolvimento consiste em copiar os módulos originais inteiramente para os novos destinos e realizar as adaptações, substituições de slugs/tabelas e os refinamentos descritos abaixo.
Mudanças e Arquitetura Necessárias
1. Novo Módulo forms-search
-
Origem:
gestor/modulos/forms/ -
Destino:
gestor/modulos/forms-search/ -
Adaptações de Nomenclatura:
-
Alterar o ID do módulo de
formsparaforms-search. -
Alterar as referências de tabela de
formsparaforms_searche deforms_submissionsparaforms_search_submissions. -
Alterar o ID numérico da tabela de
id_formsparaid_forms_search. -
Mapear e atualizar arquivos e funções JavaScript/PHP internas (ex: de
forms.jsparaforms-search.js,forms_renderparaforms_search_render, etc.).
-
-
Comportamento Específico:
-
O formulário renderizado pelo widget (
forms-search.widget.php) deve usar o métodoGET(em vez dePOST). -
O campo de entrada de busca no formulário final deve conter o atributo
name="search"para enviar a variávelsearch=...na URL. -
A ação (
action) do formulário deve apontar para o caminho da página configurada como alvo (uma página contendo a instância do widget depages-index). -
No construtor de formulários (admin), o campo de configuração do formulário deve permitir ao usuário definir a página/URL alvo do action.
-
Estatísticas de Busca (Analytics): Persistir os termos pesquisados registrando-os na tabela
forms_search_submissionsa cada busca para possibilitar futuras estatísticas/relatórios de pesquisa no CRUD administrativo do módulo.
-
2. Novo Módulo pages-index
-
Origem:
gestor/modulos/publisher-index/ -
Destino:
gestor/modulos/pages-index/ -
Adaptações de Nomenclatura:
-
Alterar o ID do módulo de
publisher-indexparapages-index. -
Alterar a referência da tabela local de
publisher_indexparapages_index. -
Alterar o ID numérico da tabela de
id_publisher_indexparaid_pages_index. -
Adaptar os scripts e funções (ex:
publisher-index.widget.jsparapages-index.widget.js,publisher_index_renderparapages_index_render, etc.).
-
-
Comportamento Específico:
-
Consulta ao Banco: Substituir o
INNER JOINcontra a tabelapublisher_pagespor uma consulta direta à tabelapaginasfiltrando apenas páginas públicas e ativas: -
Filtro obrigatório:
status='A' AND language='$language' AND tipo='pagina' AND sem_permissao=1. -
Filtros e Busca:
-
Deve interceptar a variável GET
search(ex:?search=termo) na URL. Se presente, essa variável preenche inicialmente a busca textual do widget. -
A busca textual deve filtrar a tabela
paginascomparando contra os camposnome(título) ehtml(conteúdo da página), exemplo:nome LIKE '%termo%' OR html LIKE '%termo%'. -
Suportar a ordenação do AJAX pelas 4 chaves existentes no módulo base:
title_asc,title_desc,date_asc(data de modificação ascendente),date_desc(data de modificação descente). -
Variáveis de Item Mapeadas:
-
No loop de renderização de itens (
pages_index_widget_render_itens), disponibilizar três variáveis fixas obrigatórias:-
[[item#title]]: Título da página (camponome). -
[[item#summary]]: Resumo textual da página, obtido a partir destrip_tags()do campohtmlda página e truncado para ~200 caracteres (mimetizando uma descrição). -
[[item#url]]: URL/caminho relativo da página (campocaminho).
-
-
Página Padrão de Busca:
-
Registrar uma página padrão pública com caminho
pages-index/através do arquivo de sementespages-index.json. Essa página virá pré-configurada com uma instância do widgetpages-indexpara atuar como destino padrão de buscas globais disparadas em qualquer página do site.
-
3. Migração do Banco de Dados
-
Destino:
gestor/db/migrations/ -
Nova Migração:
20260715120000_create_forms_search_and_pages_index_tables.php(ou timestamp correspondente) criando as tabelas:-
forms_search(espelhandoformscom as colunas de template embutidas:id_forms_search,id_users,name,id,description,template_id,fields_schema,module,plugin,language,status,version,html,css,css_compiled,html_extra_head,user_modified,system_updated,created_at,updated_at). -
forms_search_submissions(espelhandoforms_submissions). -
pages_index(espelhandopublisher_indexcomid_pages_indexe sempublisher_id).
-
Validação e Testes
-
Verificação de Sintaxe:
-
Executar
php -lem todos os novos arquivos PHP gerados nos novos diretórios dos módulos. -
Executar
node --checkou similar nos novos arquivos JavaScript (forms-search.js,forms-search.widget.js,pages-index.js,pages-index.widget.js).
-
-
Testes Unitários:
-
Rodar
composer testno projetoconn2flowpara garantir que os testes existentes não sofrem nenhuma regressão.
-
-
Validação Operacional:
-
Certificar que os dois novos widgets aparecem corretamente listados na tabela de widgets após a execução da atualização de dados e recursos (
atualizacao-dados-recursos.php). -
Verificar se a página padrão
pages-index/é gerada com o widget associado. -
Validar que o formulário de busca envia requisições GET corretas com a query
search=...para a página alvo, e que esta exibe as páginas correspondentes.
-