@ignacio96 @claudiahub tiene razón. Sobreescribir IndexController para algo así no es lo más recomendable, ya que es uno de los controladores más propensos a conflictos y puede complicar las actualizaciones o la compatibilidad con otros módulos que también intenten modificar el comportamiento de la homepage.
En PrestaShop 1.7.x, la forma más limpia de añadir contenido a la página de inicio es a través del hook displayHome. Este hook está diseñado específicamente para inyectar bloques de contenido en la homepage sin necesidad de tocar el core ni el IndexController. Para esto, lo ideal es crear un pequeño módulo que implemente este hook y asigne el contenido de la página CMS.
Aquí te dejo un ejemplo de cómo sería el método hookDisplayHome dentro de tu módulo (suponiendo que tienes un módulo llamado mi_cms_homepage):
public function hookDisplayHome($params)
{
$id_cms_page = (int)Configuration::get('MI_CMS_HOMEPAGE_ID'); // ID de CMS configurable
if ($id_cms_page) {
$cms = new CMS($id_cms_page, $this->context->language->id);
if (Validate::isLoadedObject($cms)) {
$this->context->smarty->assign([
'cms_home_title' => $cms->meta_title,
'cms_home_content' => $cms->content,
]);
// Renderiza tu propia plantilla de módulo para mostrar el contenido
return $this->display(__FILE__, 'views/templates/hook/mi_cms_homepage_block.tpl');
}
}
return ''; // Devuelve vacío si no hay CMS configurada o válida
}
Dentro de views/templates/hook/mi_cms_homepage_block.tpl pondrías algo tan simple como:
<div class="cms-homepage-block">
{if isset($cms_home_title)}
<h3>{$cms_home_title}</h3>
{/if}
{if isset($cms_home_content)}
{$cms_home_content nofilter}
{/if}
</div>
De esta forma, puedes configurar el ID de la página CMS desde la configuración de tu módulo, y el contenido se inyectará en la homepage a través del hook displayHome. Si prefieres no desarrollar un módulo personalizado para esto, existen soluciones ya preparadas que te permiten gestionar página cms sin tocar el código core de forma más sencilla y con una interfaz de configuración en el Back Office.