Hola @guillermo_lab,
Los compañeros @antonio_bcn y @alberto_pro tocan puntos muy importantes. Tu enfoque de override en CmsController es el camino común pero, como bien señalas, es extremadamente frágil en PrestaShop 1.7.x y futuro PrestaShop 9. initContent es un método crucial y susceptible a conflictos.
El problema con Product::getProducts en ese contexto es que no tienes un id_category o id_manufacturer de referencia, por lo que trae un listado general, lo cual rara vez es lo que se busca en una página CMS específica. Además, los overrides son la primera cosa que falla con una actualización de PrestaShop o de otros módulos que también intenten modificar el mismo controlador.
Para que tu override sea un poco más controlado y para que la asignación en Smarty funcione, podrías considerar un enfoque como este, que incluye una validación más robusta y una asignación clara, aunque sigue siendo un override:
class CmsController extends CmsControllerCore
{
public function initContent()
{
parent::initContent();
$id_cms = (int)Tools::getValue('id_cms');
if ($id_cms && $id_cms == 4) { // Asegúrate de que el ID es el correcto
$products = Product::getProducts(
(int)$this->context->language->id, // Convertir a int explícitamente
0, // No hay offset
5, // Cargar solo 5 productos
'date_add', // Ordenar por fecha de adición
'DESC' // Descendente
);
$this->context->smarty->assign('cms_featured_products', $products);
}
}
}
He ajustado la llamada a getProducts para que sea más específica (solo 5 productos, ordenados por fecha de adición) y he usado un nombre de variable Smarty más claro (cms_featured_products). Sin embargo, insisto, cualquier cambio en la estructura interna de PrestaShop o un módulo que afecte a CmsController puede invalidar esto. Es una solución de parche.
Para una integración estable y sin preocupaciones de futuras actualizaciones, la forma correcta de automatizar productos en páginas cms en la tienda es mediante un módulo dedicado. Estos módulos están diseñados para usar hooks de forma segura o para crear sus propios mini-controladores que no interfieren con el core, lo que te garantiza compatibilidad y facilidad de gestión a largo plazo.