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)
1.1 Busca Insensível a Acentos (Accent-Insensitive Search)
-
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:
Tu00edtuloem vez deTítulo), fazendo com que buscas diretas comoLIKE '%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: "í" ->u00ede\u00ed). -
Atualizar a query SQL em
publisher_index_widget_buscar_publicacoespara 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})/ivia 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 depp.fields_valuesempublisher_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 JOINdepaginascompublisher_pages. Como as páginas normais de índice (ex:/noticias) possuem a mesma chavepublisher_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_selectdepublisher_index_widget_buscar_publicacoes()para usarINNER JOINem vez deLEFT 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_pagessejam 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]](inicialmentemin($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 empublisher_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
#countde todos os arquivos de template de CRUD do módulo (adicionar.html,editar.html,clonar.htmltanto empt-brquanto emen). -
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 decountno 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-wrapperpara 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çalhoControles 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 retornartruequando o alvo ativo forpublisher-index, garantindo que as sugestões de autocomplete utilizem o formato[[item#X]]. -
Mapeamento de Backup: Adicionar a entrada
'publisher-index': 'adminPaginasBackupCampo'ao mapabackupCallbackMap. -
Rotina de Notificação de Variáveis: Declarar a função global
window.publisher_index_update_target_variablesresponsável por popularpublisher_fields_schema.template_mapcom 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 alvopublisher-indexquando 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#countausente. -
Ocultar o seletor de modo de design do simulador (
.publisher-design-mode-simulation) quando o alvo forpublisher-index.
-