¿Qué es el error SmartyCompilerException en PrestaShop?
El error SmartyCompilerException: Syntax Error in template es una de las excepciones más habituales en PrestaShop cuando se activa el modo depuración frente a una pantalla blanca o error 500. Este fallo ocurre cuando el motor de renderizado Smarty procesa un archivo de plantilla con extensión .tpl que contiene etiquetas mal cerradas, variables inexistentes o código JavaScript/CSS insertado directamente sin el debido aislamiento sintáctico.
Causas comunes del error
Este problema suele presentarse tras realizar cambios en el tema visual o instalar nuevos módulos. Entre los motivos más frecuentes se encuentran:
- Inclusión de scripts de seguimiento (como Google Analytics, píxeles de Meta o fragmentos CSS) que utilizan llaves
{ }sin escapar dentro de un archivo.tpl. - Etiquetas de control de Smarty mal formuladas o no cerradas (por ejemplo, un
{if}sin su correspondiente{/if}). - Archivos de caché compilada corruptos en el directorio temporal del servidor.
- Incompatibilidad de sintaxis de Smarty tras actualizar de PrestaShop 1.6 a 1.7 o PrestaShop 8.
Método 1: Aislar código JavaScript y CSS con etiquetas literal
La causa número uno es la confusión del analizador de Smarty al encontrar llaves de CSS o JavaScript. Para resolverlo, localiza el archivo .tpl señalado en la traza del error y envuelve el código conflictivo entre etiquetas {literal}:
- Accede a los archivos de tu tienda mediante FTP o el Administrador de Archivos de cPanel.
- Abre el archivo de plantilla indicado en el mensaje de excepción (por ejemplo,
themes/tu-tema/templates/_partials/header.tpl). - Localiza el bloque de código con JavaScript o estilos CSS.
- Envuelve dicho bloque de la siguiente manera:
{literal}<script>function test() { return true; }</script>{/literal}. - En PrestaShop 1.7 y versiones superiores también puedes añadir un espacio inmediatamente después de la llave de apertura para evitar que Smarty la interprete como una directiva propia.
- Guarda los cambios y recarga la página.
Método 2: Limpiar manualmente la caché de compilación de Smarty
A menudo, una versión antigua y defectuosa de la plantilla queda retenida en el almacenamiento temporal de compilación, provocando que el error persista incluso después de corregir el archivo original. Para purgarla manualmente sigue estos pasos:
- Conéctate al servidor mediante FTP o terminal SSH.
- Navega hasta la carpeta de caché del entorno activo. En PrestaShop 1.7 y 8, la ruta es
var/cache/prod/yvar/cache/dev/. En versiones 1.6 la ruta escache/smarty/compile/ycache/smarty/cache/. - Elimina todo el contenido dentro del directorio
smarty/compile/(asegúrate de mantener el archivoindex.phpsi existe para proteger el directorio). - Ingresa al Back Office de PrestaShop, ve a Parámetros Avanzados > Rendimiento y pulsa sobre el botón superior Borrar la caché.
Método 3: Activar el Modo Depuración para ubicar la línea exacta
Si la pantalla muestra un error 500 genérico y sospechas de Smarty pero no sabes qué plantilla falla, debes habilitar el reporte de errores detallado:
- Abre el archivo
config/defines.inc.phpmediante tu cliente FTP. - Busca la línea de configuración:
define('_PS_MODE_DEV_', false);. - Modifícala cambiando el valor a
true:define('_PS_MODE_DEV_', true);. - Recarga la página de tu tienda. Verás una traza de error en Symfony o Whoops que especificará el nombre del archivo
.tplexacto y el número de línea donde falló el compilador. - Una vez subsanado el error de sintaxis, no olvides volver a poner
_PS_MODE_DEV_enfalsepara proteger la seguridad de tu tienda.