Hola @enriqueonline70 y @pabloweb.
El análisis de @pabloweb es correcto. El IndexController está diseñado para la lógica principal de la página de inicio, incluyendo la carga de módulos que se enganchan a displayHome, displayTop, displayLeftColumn, etc. Al usar setTemplate('cms/page.tpl') en un override, estás forzando la renderización de una plantilla que no espera los datos ni la estructura de una página de inicio de PrestaShop 1.7.x, lo que resulta en la omisión de todos los hooks de módulos que normalmente se ejecutarían.
La forma más limpia y mantenible en PrestaShop 1.7.8.11 para inyectar contenido CMS en la página de inicio sin romper la estructura existente es a través de un módulo personalizado que utilice el hook displayHome. De esta manera, tu contenido CMS se inserta en un punto específico de la plantilla index.tpl (la plantilla por defecto de la home) sin interferir con otros módulos y sin overrides frágiles del core.
Aquí te muestro cómo implementarías el método hookDisplayHome dentro de un módulo básico. Necesitarías crear la estructura del módulo (/modules/micmshome/micmshome.php) y un archivo de plantilla específico para el contenido CMS (/modules/micmshome/views/templates/hook/micmshome_displayhome.tpl).
// En tu módulo personalizado: /modules/micmshome/micmshome.php
// ... (código básico del módulo: constructor, install, uninstall)
public function hookDisplayHome($params)
{
// Obtén el ID de la página CMS desde la configuración del módulo
// (Asumo que has creado una configuración en el BO para esto)
$id_cms = (int)Configuration::get('MICMSHOME_CMS_ID');
if (!$id_cms) {
return ''; // Si no hay CMS ID configurado, no hacemos nada
}
$cms = new CMS($id_cms, $this->context->language->id);
if (Validate::isLoadedObject($cms) && $cms->active) {
$this->context->smarty->assign(array(
'cms_content_homepage' => $cms->content,
'cms_title_homepage' => $cms->meta_title,
'cms_link_homepage' => $cms->link_rewrite,
'cms_page_url' => $this->context->link->getCMSLink($cms),
));
// Renderizamos nuestra plantilla específica para el contenido CMS
return $this->display(__FILE__, 'views/templates/hook/micmshome_displayhome.tpl');
}
return '';
Luego, en el archivo views/templates/hook/micmshome_displayhome.tpl (dentro de tu módulo):
{* /modules/micmshome/views/templates/hook/micmshome_displayhome.tpl *}
<div id="cms-home-content-block" class="pb-4">
{if isset($cms_title_homepage) && $cms_title_homepage}
<h2 class="h2 mb-3">{$cms_title_homepage}</h2>
{/if}
{if isset($cms_content_homepage) && $cms_content_homepage}
<div class="cms-content-wrapper">
{$cms_content_homepage nofilter}
</div>
{/if}
{if isset($cms_page_url) && $cms_page_url}
<p class="text-right mt-3"><a href="{$cms_page_url}" class="btn btn-primary btn-sm">{l s='Leer más' d='Shop.Theme.Global'}</a></p>
{/if}
</div>
Este enfoque mantiene la integridad del IndexController y permite que otros módulos funcionen correctamente al insertarse en el displayHome. Para una solución aún más profesional y que te evite el desarrollo y mantenimiento a medida, te sugiero utilizar un módulo preparado para página cms para tiendas en producción, ya que suele ser más robusto y fácil de configurar desde el panel de administración.