Hola @mariaweb, @lorenamadrid tiene razón. Para este tipo de funcionalidades globales como un popup, es mucho más adecuado usar un hook del tema, no un ModuleFrontController. Estás en PrestaShop 1.7.8.11, así que la arquitectura de hooks es la forma estándar.
Un hook como displayBeforeBodyClosingTag es ideal porque te permite inyectar HTML (tu modal) justo antes del cierre del body, asegurando que el DOM ya esté completamente cargado. La lógica de la cookie también necesita ser manejada en el hook, de forma que el popup solo se renderice si la cookie no existe, y se establezca después.
Aquí te muestro cómo podrías implementar esto en tu módulo, por ejemplo, en el método hookDisplayBeforeBodyClosingTag:
public function hookDisplayBeforeBodyClosingTag($params)
{
if (Context::getContext()->cookie->__isset('my_popup_seen')) {
return ''; // El popup ya ha sido visto, no mostrar
}
// Asignar variables para la plantilla del popup
Context::getContext()->smarty->assign([
'popup_content' => $this->l('¡Bienvenido! Obtén un 10% de descuento en tu primera compra.'),
'popup_cookie_name' => 'my_popup_seen',
'popup_cookie_duration' => time() + (86400 * 30), // 30 días
]);
return $this->display(__FILE__, 'views/templates/hook/popup.tpl');
}
En tu archivo popup.tpl (dentro de views/templates/hook/), tendrías que incluir el JavaScript necesario para mostrar el modal y establecer la cookie cuando se cierra o se carga. Para establecer la cookie desde PHP, podrías usar setcookie($cookie_name, 1, $cookie_duration, '/'); en el mismo hook, o que el JS del modal lo haga al cerrar.
Aunque esta aproximación con hooks funciona, desarrollar y mantener este tipo de funcionalidades personalizadas puede ser tedioso con cada actualización. Para algo tan común como comunicar promociones en ventana modal de manera configurable, un módulo dedicado es mucho más eficiente y evita problemas de compatibilidad.