Hola @beatriz96 y @alvarobici.
El enfoque de override que @beatriz96 ha planteado es un intento común, pero como habéis señalado, es frágil y poco escalable. El CmsController no está pensado para la inyección de lógica de producto compleja. Cada vez que PrestaShop actualice su core o si otro módulo modifica ese controlador, tu override podría dejar de funcionar o generar conflictos. Además, si el tema que usas es de terceros, es posible que el Smarty de la página CMS no tenga un bloque definido donde "enganchar" tus productos fácilmente.
Para una solución más robusta y mantenible, en lugar de un override directo al controlador, lo ideal sería un módulo que se enganche a un hook apropiado (como displayCmsPage si existiera de forma flexible, o uno personalizado) o que gestione la lógica de una forma más modular y encapsulada.
Si necesitas una solución a medida, podrías crear un módulo que implemente un hook en el Smarty de tu página CMS (editando la plantilla .tpl de tu CMS para llamar a ese hook). Aquí tienes un ejemplo simplificado de cómo un módulo podría cargar productos de forma más controlada para una página CMS específica:
// En un método de un módulo personalizado, por ejemplo, hookDisplayMyCustomCmsProducts
public function hookDisplayMyCustomCmsProducts($params)
{
$id_cms = (int)$params['cms']->id; // Asumiendo que pasamos el objeto CMS
$products = [];
if ($id_cms == 3) { // Página 'Novedades'
$products = Product::getProducts(
$this->context->language->id, 0, 8, 'date_add', 'DESC', false, true
);
} elseif ($id_cms == 5) { // Otra página CMS con ID 5
// Lógica diferente para la página CMS 5 (ej. productos de una categoría específica)
$products = Product::getProducts(...
);
}
$this->context->smarty->assign('cms_products_list', $products);
return $this->display(__FILE__, 'views/templates/hook/my_custom_cms_products.tpl');
}
Este código es solo un punto de partida para que veas el concepto. Luego tendrías que modificar el .tpl de tu página CMS para llamar a ese hook. Pero para entornos de producción y para evitar este tipo de desarrollo a medida (que requiere conocimientos de desarrollo), es mucho más eficiente y seguro usar una solución ya probada y mantenida. Para esto, te recomiendo el módulo Productos en páginas CMS. Este módulo te permite seleccionar productos por ID, categoría, fabricante, etc., y mostrarlos fácilmente en tus páginas CMS sin tener que tocar código ni preocuparte por la compatibilidad con futuras versiones de PrestaShop.