Twig e Smarty no PrestaShop: o que se usa onde e como personalizar sem estragar
O front continua em Smarty e o back office usa Twig. Explicamos como personalizar cada um e onde pôr as suas alterações para que sobrevivam às atualizações.
O PrestaShop usa dois motores de templates: Smarty para a loja (front) e Twig para os ecrãs modernos do back office. Saber qual mexer em cada caso poupa muitas horas à procura de onde está um texto.
O front: Smarty e o tema
Tudo o que o cliente vê sai dos templates .tpl do tema ativo. Um tema filho só precisa de incluir os templates que altera: os restantes são herdados do tema pai.
Substituir o template de um módulo
Não edite os ficheiros dentro de modules/: a próxima atualização do módulo vai substituí-los. Copie o template para o seu tema respeitando o caminho:
modules/ps_shoppingcart/ps_shoppingcart.tpl
→ themes/mitema/modules/ps_shoppingcart/ps_shoppingcart.tpl
O PrestaShop procura primeiro no tema. Mas atenção: se o módulo mudar as suas variáveis numa versão nova, a sua cópia pode ficar desatualizada. Reveja os templates substituídos em cada atualização.
O back office: Twig
Os ecrãs em Symfony são desenhados com Twig. Os módulos podem acrescentar conteúdo nos hooks do back office ou ter os seus próprios templates Twig em @Modules/mimodulo/.... Substituir templates Twig do núcleo é possível mas delicado; sempre que puder, use hooks.
Escape: a parte que não se pode esquecer
- No Smarty, faça escape de tudo o que vem de dados:
{$nombre|escape:'html':'UTF-8'}. Usenofilterapenas com HTML gerado por si e que saiba ser seguro. - No Twig o escape é automático;
|rawdesativa-o, use-o com o mesmo cuidado.
Cache de templates
O Smarty compila os templates e, consoante a configuração, guarda o HTML de alguns blocos. Se alterar um template e não vir a mudança, limpe a cache em Desempenho. Em desenvolvimento, ative «Forçar compilação» para não ter de o fazer sempre, e desative-o em produção: é muito mais lento.
O nosso conselho
Ponha todas as alterações visuais num tema filho e todas as alterações de comportamento num módulo. Assim, atualizar o tema pai ou o PrestaShop é uma formalidade e não uma operação de risco.