DfDarkMode: modo escuro para Shopware 6.7
Instale e configure o modo escuro: deteção do navegador, botão no cabeçalho e preferência guardada na conta de cliente.
Apresentação
O DfDarkMode acrescenta um modo escuro completo ao storefront do Shopware 6.7. A extensão aplica o atributo data-bs-theme na etiqueta raiz html da página: as suas variáveis CSS declaradas sob [data-bs-theme="dark"] ativam-se automaticamente, sem qualquer alteração ao seu tema.
- Deteção automática da definição
prefers-color-schemedo navegador (modo Auto) - Botão no cabeçalho: um botão que alterna entre Auto → Claro → Escuro
- Preferência do cliente: seletor visual na página de perfil da conta de cliente
- Persistência dupla: cookie para os visitantes, campo próprio de cliente para as contas com sessão iniciada
- Anti-FOUC: o tema é aplicado antes da renderização da página, sem clarão branco
- Sincronização no início de sessão: a preferência da conta é restaurada automaticamente ao iniciar sessão
Pré-requisitos
- Shopware 6.7.0 ou superior
- Um tema cujas cores estejam definidas por variáveis CSS sob
[data-bs-theme="dark"](convenção Bootstrap 5.3)
A extensão não fornece uma paleta escura: controla apenas o atributo data-bs-theme. O seu CSS de modo escuro tem de existir já no tema.
Instalação
- Copie a pasta
DfDarkModeparacustom/plugins/da sua instalação Shopware. - Execute os seguintes comandos:
bin/console plugin:refresh
bin/console plugin:install --activate DfDarkMode
bin/console theme:compile
Depois da compilação do tema, o botão de alternância aparece no cabeçalho do storefront e o cartão «Aparência» surge na página de perfil da conta de cliente.
Em ambiente de desenvolvimento, use bin/console theme:compile --active-only ou o watcher do storefront para recompilar em direto.
Funcionamento
Os três modos
- Auto (predefinição): segue a definição do navegador ou do sistema operativo. Se o utilizador passar o sistema a escuro, o storefront acompanha em tempo real.
- Claro: força o modo claro seja qual for o navegador.
- Escuro: força o modo escuro seja qual for o navegador.
Ordem de prioridade da preferência
- Cliente com sessão iniciada: o campo próprio
df_dark_mode_preferenceda conta de cliente prevalece sobre tudo. - Visitante: o cookie
df-dark-mode(validade de 1 ano). - Sem preferência: modo Auto.
Anti-FOUC
Um script inline colocado no head lê o cookie e aplica data-bs-theme antes de o navegador pintar a página. Resultado: nenhum clarão de fundo claro no carregamento em modo escuro, mesmo com uma ligação lenta.
Sincronização no início de sessão
Quando um cliente inicia sessão, a sua preferência guardada é copiada para o cookie. O script anti-FOUC dispõe assim do valor certo logo na página seguinte, em todos os dispositivos dele.
Utilização do lado do cliente
Botão do cabeçalho
O botão mostra um ícone consoante o modo ativo: monitor (Auto), sol (Claro) ou lua (Escuro). Cada clique passa ao modo seguinte. A alteração é aplicada instantaneamente com uma transição suave e guardada em segundo plano.
Página de perfil da conta
Em A minha conta → Perfil, um cartão «Aparência» oferece três miniaturas clicáveis (Auto, Claro, Escuro). A seleção é guardada na conta de cliente e aparece uma mensagem de confirmação. A navegação por teclado (Enter / Espaço) é suportada.
Personalização
Mover o botão do cabeçalho
Por predefinição, o botão é injetado no bloco base_header_actions_wishlist. Para o colocar noutro sítio, sobreponha o template de base no seu tema e inclua o componente no bloco à sua escolha:
{% sw_extends '@Storefront/storefront/base.html.twig' %}
{% block base_header_actions_search %}
{{ parent() }}
{% sw_include '@Storefront/storefront/component/dark-mode-toggle.html.twig' %}
{% endblock %}
Reagir às mudanças de tema em JavaScript
A extensão emite o evento df-dark-mode-changed em document a cada alteração:
document.addEventListener('df-dark-mode-changed', (e) => {
console.log(e.detail.preference); // 'auto', 'light' ou 'dark'
console.log(e.detail.resolvedTheme); // 'light' ou 'dark'
});
Útil para recarregar um mapa, um gráfico ou qualquer componente de terceiros que não leia as variáveis CSS.
Textos e traduções
Todas as etiquetas são snippets do Shopware (prefixo df-dark-mode.) alteráveis na administração, em Definições → Snippets. A extensão inclui o francês, o inglês e o alemão.
Referência técnica
Campo próprio
Na instalação, a extensão cria um conjunto de campos próprios df_dark_mode com o campo df_dark_mode_preference (select: auto / light / dark) associado à entidade customer. É visível e modificável na administração, na ficha do cliente.
Rota AJAX
POST /df-dark-mode/save com o parâmetro mode (auto / light / dark). Coloca o cookie e, se houver um cliente com sessão iniciada, atualiza o seu campo próprio. Resposta em JSON.
Cookie
Nome: df-dark-mode · Valores: auto / light / dark · Duração: 365 dias · SameSite=Lax. Cookie estritamente funcional: não contém qualquer dado pessoal nem identificador de seguimento.
Desinstalação
bin/console plugin:deactivate DfDarkMode
bin/console plugin:uninstall DfDarkMode
Na desinstalação, o conjunto de campos próprios e as preferências dos clientes são eliminados, exceto se a opção «conservar os dados» estiver marcada.
Resolução de problemas
O botão não aparece no cabeçalho
Verifique que o tema foi mesmo recompilado (bin/console theme:compile) e limpe a cache (bin/console cache:clear). Se o seu tema sobrepuser fortemente o bloco base_header_actions_wishlist, mova o include do componente para outro bloco (ver Personalização).
O modo escuro ativa-se mas as cores não mudam
A extensão coloca corretamente data-bs-theme="dark" (verificável no inspetor do navegador) mas o seu CSS não define variáveis sob esse seletor. Acrescente as suas variáveis escuras no bloco [data-bs-theme="dark"] do seu tema.
Clarão branco no carregamento
Confirme que nenhuma outra extensão sobrepõe o bloco base_head sem chamar {{ parent() }}, o que eliminaria o script anti-FOUC.
A preferência não é mantida entre dispositivos
Só os clientes com sessão iniciada beneficiam da sincronização entre dispositivos através da conta. Para os visitantes, a preferência é local ao navegador (cookie).
Changelog
1.0.0
- Versão inicial: deteção do navegador, botão no cabeçalho, preferência na conta de cliente, anti-FOUC, sincronização no início de sessão, snippets FR/EN/DE.