📧
Temas de Email modernos en PrestaShop 8/9
Actualizado: 2024-12-01
PrestaShop 1.7.7+ incluye un motor de email moderno basado en Twig que sustituye al sistema antiguo de plantillas HTML/TXT. Permite crear temas de email completos, extender layouts del core y aplicar transformaciones de diseno sin modificar archivos del sistema.
#El motor de email moderno (PS 1.7.7+)
| Caracteristica | Sistema antiguo | Sistema moderno (PS 1.7.7+) |
|---|---|---|
| Tecnologia | HTML/TXT estatico | Twig templates |
| Personalizacion | Edicion directa de archivos | Temas + Transformaciones |
| Multitienda | Limitada | Soporte completo |
| Activacion | Manual | BO: Diseno > Tema de email |
#Estructura de directorios
Estructura de directorios para un tema de email en un modulo
bash
modules/mymodule/
├── mails/
│ ├── themes/
│ │ └── my_custom_theme/ # Nombre del tema
│ │ ├── assets/ # CSS, imagenes del tema
│ │ └── layouts/ # Plantillas Twig del tema
│ └── layouts/ # Layouts que extienden el core
│ └── extended_order_conf.html.twig
└── mymodule.php
#Registrar un tema de email
Registrar el tema via hookActionListMailThemes
php
<?php
use PrestaShop\PrestaShop\Core\MailTemplate\FolderThemeScanner;
public function install(): bool
{
return parent::install()
&& $this->registerHook('actionListMailThemes')
&& $this->registerHook('actionGetMailLayoutTransformations')
&& $this->registerHook('actionBuildMailLayoutVariables');
}
/**
* Registra el tema personalizado del modulo.
* PrestaShop escaneara el directorio del tema y lo añade a la lista
* disponible en BO > Diseno > Tema de email.
*/
public function hookActionListMailThemes(array $params): void
{
/** @var \PrestaShop\PrestaShop\Core\MailTemplate\ThemeCollectionInterface $themes */
$themes = $params['mailThemes'];
$themePath = _PS_MODULE_DIR_ . $this->name . '/mails/themes/my_custom_theme';
$scanner = new FolderThemeScanner();
$myTheme = $scanner->scan($themePath);
if (null !== $myTheme) {
$themes->add($myTheme);
}
}
#Extender layouts existentes
Reemplazar el layout de confirmacion de pedido
php
<?php
use PrestaShop\PrestaShop\Core\MailTemplate\Layout\Layout;
/**
* Reemplaza o extiende layouts del tema 'modern' del core.
* Util para personalizar emails especificos sin crear un tema completo.
*/
public function hookActionListMailThemes(array $params): void
{
$themes = $params['mailThemes'];
foreach ($themes as $theme) {
// Solo modificar el tema 'modern' del core
if ($theme->getName() !== 'modern') {
continue;
}
// Obtener el layout original de confirmacion de pedido
$orderConf = $theme->getLayouts()->getLayout('order_conf', '');
if ($orderConf) {
$index = $theme->getLayouts()->indexOf($orderConf);
// Reemplazar con nuestra version extendida
$theme->getLayouts()->offsetSet($index, new Layout(
'order_conf',
'@Modules/mymodule/mails/layouts/extended_order_conf.html.twig',
'@Modules/mymodule/mails/layouts/extended_order_conf.txt.twig'
));
}
}
}
mails/layouts/extended_order_conf.html.twig — extender layout del core
twig
{# Extender el layout base del tema modern #}
{% extends '@MailThemes/modern/layouts/order_conf.html.twig' %}
{# Sobreescribir el bloque del footer para añadir logo de la empresa #}
{% block footer %}
<table width="100%">
<tr>
<td align="center" style="padding: 20px;">
<img src="{{ shop.logo }}" alt="{{ shop.name }}" height="40" />
</td>
</tr>
<tr>
<td align="center" style="font-size: 12px; color: #666;">
{{ parent() }}
</td>
</tr>
</table>
{% endblock %}
#Variables custom en emails
Añadir variables dinamicas a los emails con hookActionBuildMailLayoutVariables
php
<?php
/**
* Añade variables custom disponibles en todos los templates Twig de email.
* Se llama en el momento de generar cada email.
*/
public function hookActionBuildMailLayoutVariables(array $params): void
{
// $params['mailLayoutVariables'] es el array de variables del email
// Añadir informacion de la empresa
$params['mailLayoutVariables']['mymodule_company_slogan'] =
Configuration::get('MY_MODULE_SLOGAN');
// Añadir URL de redes sociales
$params['mailLayoutVariables']['mymodule_facebook'] =
Configuration::get('MY_MODULE_FACEBOOK_URL');
// Añadir numero de soporte
$params['mailLayoutVariables']['mymodule_support_phone'] =
Configuration::get('MY_MODULE_SUPPORT_PHONE');
}
#Transformaciones de diseno
Aplicar transformacion de colores con hookActionGetMailLayoutTransformations
php
<?php
use PrestaShop\PrestaShop\Core\MailTemplate\Transformation\AbstractTransformation;
/**
* Aplica transformaciones al HTML del email antes de enviarlo.
* Ejemplo: cambiar colores corporativos.
*/
public function hookActionGetMailLayoutTransformations(array $params): void
{
$transformations = $params['layoutTransformations'];
// Reemplazar el color principal del tema por el color de la tienda
$shopColor = Configuration::get('PS_SHOP_COLOR');
if ($shopColor) {
// Puedes usar tu propia clase de transformacion
// o usar las transformaciones del core
$transformations->add(
new class($shopColor) extends AbstractTransformation {
private string $color;
public function __construct(string $color) {
parent::__construct('text/html');
$this->color = $color;
}
public function apply(
\Twig\Environment $twig,
array $templateVariables
): array {
// Inyectar variable de color en el template
$templateVariables['shop_color'] = $this->color;
return $templateVariables;
}
}
);
}
}
#Activar el tema desde el BO
Una vez instalado el modulo, el tema estara disponible en el Back Office. Para activarlo y generar los archivos de email:
| Paso | Accion |
|---|---|
| 1 | BO > Diseno > Tema de email |
| 2 | Seleccionar tu tema en el desplegable 'Elegir tema de email' |
| 3 | Hacer clic en 'Generar emails' para crear los archivos HTML/TXT |
| 4 | Verificar en BO > Parametros avanzados > Email > Enviar email de prueba |
Solo Twig — sin HTML estatico
El sistema moderno usa exclusivamente Twig para disenar los emails y genera los archivos HTML/TXT finales bajo demanda. No edites los archivos generados directamente ya que se sobreescriben al regenerar el tema.
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.