Conn2Flow
Navegação das docs

SDD

req-041: Correções no Módulo publisher-index (Busca, Acentuação, Duplicações, CRUD e Métricas)

Este documento detalha o conjunto de correções e melhorias solicitadas para o módulo publisher-index, abrangendo tanto o comportamento dinâmico do widget público quanto a…

Este documento detalha o conjunto de correções e melhorias solicitadas para o módulo publisher-index, abrangendo tanto o comportamento dinâmico do widget público quanto a interface administrativa (CRUD).


1. Requisitos do Lote (Ajustes no Widget Renderizado)

  • Problema: Ao pesquisar por publicações utilizando termos acentuados (ex: "tí" no campo .publisher-index-search), o filtro não retorna resultados mesmo quando há publicações correspondentes com acento (ex: "Título dessa página").

  • Causa: Alguns registros no banco de dados estão salvos com caracteres Unicode corrompidos (ex: Tu00edtulo em vez de Título), fazendo com que buscas diretas como LIKE '%Títu%' falhem.

  • Solução:

    • No arquivo publisher-index.widget.php, implementar uma função helper de conversão que mapeie caracteres especiais de busca para seus equivalentes Unicode codificados (ex: "í" -> u00ed e \u00ed).

    • Atualizar a query SQL em publisher_index_widget_buscar_publicacoes para que o filtro textual (busca) realize uma busca disjuntiva (OR) cobrindo tanto o termo literal quanto as versões com escapes Unicode (com e sem barra invertida):

      p.nome LIKE '%[busca]%' OR p.nome LIKE '%[u00xx]%' OR p.nome LIKE '%[\u00xx]%'

1.2 Correção de Caracteres Unicode Corrompidos no Banco

  • Problema: O índice de publicações do widget renderizado exibe textos com caracteres Unicode literais sem as barras invertidas (ex: Tu00edtulo dessa pu00e1gina).

  • Solução:

    • Criar a função auxiliar publisher_index_widget_corrigir_unicode($str) no backend PHP. Esta função deve localizar padrões do tipo /\\?u([0-9a-fA-F]{4})/i via regex e decodificá-los de volta para caracteres UTF-8 usando a lógica:

      mb_convert_encoding(pack('N', hexdec($m[1])), 'UTF-8', 'UCS-4BE')
    • Aplicar este helper no título da página (p.nome) e em todas as variáveis customizadas recuperadas de pp.fields_values em publisher_index_widget_buscar_publicacoes() antes de devolver os registros para renderização.

1.3 Eliminação de Duplicados e Registros Inválidos (INNER JOIN)

  • Problema: O widget está renderizando itens duplicados ou que não pertencem à listagem do publicador, exibindo links correspondentes à própria página de índice que está executando o widget.

  • Causa: A consulta de publicações realiza um LEFT JOIN de paginas com publisher_pages. Como as páginas normais de índice (ex: /noticias) possuem a mesma chave publisher_id = 'noticias' mas não são publicações reais, elas aparecem na consulta com campos extras nulos.

  • Solução:

    • Alterar a tabela no método banco_select de publisher_index_widget_buscar_publicacoes() para usar INNER JOIN em vez de LEFT JOIN:

      paginas AS p INNER JOIN publisher_pages AS pp ON pp.page_id = p.id AND pp.language = p.language
    • Isso garante que apenas registros de publicações genuínas com correspondência em publisher_pages sejam exibidos no widget.

1.4 Exibição de Métricas de Paginação ("Exibindo X de Y")

  • Problema: O widget necessita exibir informações dinâmicas do progresso da paginação do tipo: "Exibindo X de Y" (ex: Exibindo 20 de 180).

  • Solução:

    • Mapeamento de Variáveis: Declarar e resolver no backend PHP as variáveis globais do widget [[page_count]] (inicialmente min($items_per_page, $total)) e [[page_total]] (total de publicações casadas).

    • Retorno no AJAX: Adicionar a contagem total de publicações que casam com a busca (total) no retorno JSON do endpoint AJAX em publisher_index_render_ajax.

    • Atualização Dinâmica no Cliente: No arquivo publisher-index.widget.js, ao concluir a requisição AJAX (seja de nova busca, ordenação ou "carregar mais"):

    • Contar a quantidade física de elementos filhos renderizados no contêiner da listagem.

    • Localizar e atualizar o texto de quaisquer seletores internos [data-page-count] e [data-page-total] com os números vigentes.


2. Requisitos de Administração e CRUD

2.1 Remoção do Campo Redundante "Quantidade Máxima de Itens"

  • Problema: Na aba de Regra de Curadoria, o campo "Quantidade máxima de itens" (count) tem papel redundante com "Itens por página" (items_per_page), gerando confusão.

  • Solução:

    • Excluir o bloco do input #count de todos os arquivos de template de CRUD do módulo (adicionar.html, editar.html, clonar.html tanto em pt-br quanto em en).

    • Redimensionar os campos restantes da linha no grid: a regra de alimentação (rule) e a ordenação (order_by) passam a ocupar 8 colunas cada (eight wide field), preenchendo a linha de 16 colunas.

    • Ajustar o javascript administrativo (publisher-index.js) para não depender do elemento #count. O valor de count no schema enviado ao banco pode ser suprimido ou mantido estático com um fallback seguro.

2.2 Reorganização do Seletor de Itens Manuais (#manual-items-wrapper)

  • Problema: O selecionador de itens manuais está renderizado dentro da aba de Controles de Exibição, mas logicamente pertence ao bloco de Regra de Curadoria (sendo ativado somente na regra manual).

  • Solução:

    • Mover o contêiner #manual-items-wrapper para cima nos arquivos HTML do CRUD, inserindo-o logo após a linha de opções de regra de alimentação/ordenação e antes do cabeçalho Controles de Exibição do Índice.

2.3 Correção de Typo de HTML

  • Problema: O template do contêiner de itens manuais contém barras invertidas inválidas que quebram a validação estrutural do HTML:

    <div\ class="field"\ id="manual-items-wrapper" ...> </div\>
  • Solução:

    • Corrigir a marcação para <div class="field" id="manual-items-wrapper" ...> </div> em todas as páginas do CRUD (adicionar, editar, clonar de ambos os idiomas).


3. Integrações com o Editor HTML Visual

3.1 Correções no Script html-editor-interface.js

  • Variáveis Sensíveis ao Alvo: Atualizar a função alvoUsaItemVars() para retornar true quando o alvo ativo for publisher-index, garantindo que as sugestões de autocomplete utilizem o formato [[item#X]].

  • Mapeamento de Backup: Adicionar a entrada 'publisher-index': 'adminPaginasBackupCampo' ao mapa backupCallbackMap.

  • Rotina de Notificação de Variáveis: Declarar a função global window.publisher_index_update_target_variables responsável por popular publisher_fields_schema.template_map com a lista de variáveis do modelo selecionado e atualizar a tabela lateral de autocomplete.

  • Modo de Simulação do Editor:

    • No helper publisherVariablesOrSimulation(), adicionar o tratamento para o alvo publisher-index quando a simulação do painel lateral estiver ativa.

    • A simulação deve multiplicar o template do item <!-- item < --> com base no valor digitado no controle #items_per_page (fallback 10) em vez do #count ausente.

    • Ocultar o seletor de modo de design do simulador (.publisher-design-mode-simulation) quando o alvo for publisher-index.

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada