2.6 KiB
Executable File
2.6 KiB
Executable File
Sistema de Temas e Customizer (Arquitetura)
Este documento detalha o funcionamento técnico do sistema de temas do SysCMS, incluindo a herança de templates e o motor de personalização dinâmica.
1. Arquitetura de Herança (Template Hierarchy)
O SysCMS utiliza um motor de busca de arquivos em camadas para permitir a máxima flexibilidade sem duplicidade de código:
- Tema Ativo (
themes/{active}/): Prioridade máxima. - Tema Pai (
themes/{parent}/): Se o tema ativo tiver a tagTemplateno seustyle.css. - Módulos (
modules/{module}/views/): Fallback automático para as views padrão do sistema. - Templates Globais (
templates/): Fallback para layouts e componentes comuns.
2. Overrides de Módulos
Para sobrescrever a visualização de um módulo (ex: index), o tema deve replicar a estrutura interna do módulo:
themes/{tema}/modules/{nome_do_modulo}/views/{template}.twig
Isso permite que um tema mude apenas partes específicas de um módulo sem afetar sua lógica de controle.
3. O Personalizador (Customizer)
O Customizer é alimentado por um arquivo JSON e armazena os valores no banco de dados.
Fluxo de Dados:
- Definição: O tema declara campos no arquivo
customizer.json. - Gestão: O administrador altera os valores em
Sistema > Temas > Personalizar. - Persistência: Os valores são salvos na tabela
system_configcom a chavetheme_settings_{slug_do_tema}. - Injeção: O
Kernel\View.phplê esses valores e os injeta na variável globaltheme_settingsem todas as views Twig.
Tipos de Campos Suportados:
color: Seletor de cores hexadecimal.text: Campo de texto simples.switch: Interruptor booleano (on/off).select: Menu suspenso com opções pré-definidas.
4. Assets e URLs Dinâmicas
- Use
theme_url()para carregar arquivos CSS/JS/Imagens do tema. Ele resolverá automaticamente o caminho correto considerando a herança (Child > Parent). - Use
asset_url()para arquivos globais na pasta/public/assets.
5. Diretrizes para Desenvolvedores (IA)
- Sempre verifique o tema ativo: Antes de modificar qualquer arquivo em
/modules/, verifique se o usuário deseja que a mudança seja global ou apenas para o tema atual. - Não altere o Kernel para novos temas: O sistema de temas já é genérico. Novas funcionalidades de temas devem ser implementadas via
customizer.jsone lógica de template. - Child Themes: Ao criar temas derivados, utilize a tag
Template:nostyle.csspara manter o código limpo e herdar funcionalidades do tema base.