MRR Instant Navigation self-updates
Navegação instantânea para sites Bricks Builder: troca de página sem recarregar, pré-carga, skeleton e scripts do Bricks/WooCommerce funcionando (WordPress plugin)
by Marreira Digital · github.com/marreiradigital/mrr-navegacao · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/marreiradigital/mrr-navegacao/archive/refs/heads/main.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
MRR Navegação (MRR Instant Navigation)
Plugin de WordPress para sites no Bricks Builder. Com ele, o clique num link interno troca só o conteúdo da página, sem recarregar, e os scripts do Bricks, do WooCommerce e das próprias páginas continuam funcionando como numa carga normal. Ele também pré-carrega as páginas, mostra skeleton enquanto o conteúdo chega e volta para a carga normal sempre que algo sai do previsto.
English: instant navigation for Bricks Builder sites. Internal links swap only the content while Bricks, WooCommerce and page scripts keep working. Includes prefetching, skeletons, View Transitions, Google Analytics page views, a test mode and updates from GitHub releases. The plugin is fully translatable (English and Brazilian Portuguese included); see
readme.txt.
Instalação
- Baixe o
mrr-navegacao.zipda última versão. Use o zip da release, não o "Source code": ele já vem com as dependências. - No site, vá em Plugins → Adicionar novo → Enviar plugin e ative.
- Abra Configurações → Navegação instantânea, comece em "Só para quem administra o site (teste)", navegue pelo site e depois passe para "Ligada para todos".
As versões novas aparecem em Plugins → Atualizações, como qualquer plugin.
Requisitos: tema Bricks 1.9 ou mais novo, WordPress 6.8 e PHP 8.1.
Como funciona
| Peça | Papel |
|---|---|
assets/nucleo.js |
impresso inline no topo do <head>, antes de qualquer script. Anota o que cada script liga na página: ouvintes em window, document, html e body, timers, requestAnimationFrame, observers e eventos jQuery. Na troca, tudo o que a página anterior ligou é desligado. Também guarda o DOMContentLoaded, o load e o jQuery(fn) das bibliotecas, para repetir em cada página nova |
assets/navegacao.js |
o motor: intercepta o clique, pré-carrega, troca o <body> e o que muda no <head>, roda os scripts da página nova, repete a inicialização das bibliotecas e cuida dos skeletons |
assets/navegacao.css |
barra de carregamento, transição e skeleton (também vai inline no <head>) |
inc/config.php |
opções, onde a navegação vale (mrrnav_ativo_aqui()), conflitos conhecidos e o registro de ocorrências (REST mrr-navegacao/v1/falha, só para administradores) |
inc/front.php |
imprime o núcleo e carrega o motor, marcando os dois para os otimizadores não mexerem |
inc/admin.php |
Configurações → Navegação instantânea e os avisos no painel |
Onde a navegação vale: o servidor decide, e só a página que leva o núcleo participa. Estas sempre abrem com carga completa:
- carrinho, finalizar compra e minha conta;
- o painel e o editor do Bricks;
- a lista de exclusão das configurações.
Link com parâmetro que muda algo no servidor (add-to-cart, comprar, download_file, action, _wpnonce…) nunca é pré-carregado.
Para scripts próprios
document.addEventListener('mrr:pagina', function (e) {
// página nova pronta: e.detail.url, e.detail.titulo
// o que for ligado aqui em window/document é desligado sozinho na troca seguinte
});
mrr:saindo: disparado antes da troca.data-mrr-nav="off"ou a classemrr-sem-nav: num link, ou num bloco em volta dele, faz o link abrir com carga completa.data-mrr-nav="manter": num elemento comid, mantém o mesmo elemento entre as páginas.MRRNavegacao.ir(url): navega pelo código.
Filtros de PHP:
mrrnav_ativo: desliga a navegação numa requisição.mrrnav_pre_carga_maximo: limite de páginas pré-carregadas por página (padrão 40).mrrnav_conflitos: acrescenta ou tira avisos de conflito.
Desenvolvimento
php composer.phar install --no-dev # baixa o Plugin Update Checker para vendor/
php composer.phar audit --no-dev # zero vulnerabilidade é requisito
python tools/i18n.py # atualiza o .pot, o .po e compila .mo e .l10n.php
python tools/i18n.py --checar # falha se faltar tradução ou se os compilados estiverem velhos
Traduções:
- Os textos do PHP estão em inglês, como pede o WordPress.
- O pt-BR fica em
languages/mrr-navegacao-pt_BR.po: edite omsgstre rode otools/i18n.py. - O WordPress 6.5+ lê o
.l10n.php, que é mais rápido que o.mo.
Publicar uma versão
- Suba o número em
mrr-navegacao.php(cabeçalhoVersioneMRRNAV_VERSAO) e emreadme.txt(Stable tage changelog). - Faça o commit e marque a versão:
git tag v1.2.0 && git push origin main --tags. - A Action
release.ymlcuida do resto:- confere se a tag bate com o cabeçalho;
- roda o lint e o
tools/i18n.py --checar; - instala as dependências e monta o
mrr-navegacao.zip(sem o que está em.distignore); - publica a release no GitHub.
- Os sites com o plugin veem a atualização em até 12 horas. Para ver na hora, use "Verificar atualizações" em Plugins.
Licença
GPL-2.0 ou posterior. O Plugin Update Checker (MIT) vem em vendor/ no zip da release.