Hola @miriamadmin y @miriam24,
Efectivamente, @miriam24 ha dado con la clave. El error Call to undefined method MyModule::getContainer() se produce porque la clase Module en PrestaShop 9 no hereda directamente de un objeto que exponga getContainer() de forma nativa. Para acceder al contenedor de servicios de Symfony desde un hook de un módulo clásico, debes hacerlo a través del contexto global de PrestaShop. Sin embargo, es crucial verificar siempre que el contenedor esté disponible en ese punto del ciclo de vida del hook.
Aquí te muestro cómo podrías obtener el repositorio de productos correctamente:
// Dentro de tu hookDisplayHome en el módulo (MyModule.php)
$container = $this->context->getContainer(); // Así se accede al contenedor
if (null === $container) {
return ''; // Siempre comprueba si está disponible en el contexto
}
$productRepository = $container->get('prestashop.core.product.repository');
$products = $productRepository->findAvailableProducts(10);
// ... el resto de tu lógica para Smarty
Con $this->context->getContainer() accedes al contenedor de servicios. Es fundamental añadir la verificación if (null === $container) porque no todos los contextos o hooks garantizan que el contenedor esté siempre inicializado, aunque para displayHome suele estarlo. Aunque esto resuelve el error del acceso al contenedor, para una gestión más robusta y sin preocupaciones por futuras actualizaciones o conflictos, especialmente si necesitas una automatización de productos en la página con opciones avanzadas (como rotación, productos de distintas categorías, etc.), un módulo dedicado sería la mejor opción. Los overrides o las ediciones directas de código siempre tienen el riesgo de romperse con las actualizaciones del core o del tema.