Hola @rubendigital,
Confirmado lo que comentan @alberto_bici y @rocio_96. El hookDisplayProductAdditionalInfo en PrestaShop 9, al igual que en versiones anteriores, solo te proporciona por defecto el id_product y id_product_attribute dentro del array $params. Tu función renderProductWidget probablemente está intentando acceder a propiedades del objeto Product (como name, description, etc.) que no están presentes directamente.
La solución es instanciar el objeto Product dentro del hook antes de pasárselo a tu método de renderizado. Así te aseguras de que todos los datos estén disponibles. Aquí tienes la modificación que deberías aplicar en tu archivo gpsrenterprise/gpsrenterprise.php:
use Product;
function hookDisplayProductAdditionalInfo($params)
{
if (!isset($params['product']) || !($params['product'] instanceof Product)) {
$params['product'] = new Product((int) $params['id_product'], false, (int) $params['id_lang']);
}
return $this->renderProductWidget($params, GpsrProductDisplay::HOOK_ADDITIONAL_INFO);
}
Explicación de los cambios:
use Product;: Se añade use Product; al principio del archivo (después de <?php si no está ya) para poder usar la clase Product directamente.
if (!isset($params['product']) || !($params['product'] instanceof Product)): Esta condición verifica si el objeto Product ya existe en $params o si no es una instancia válida de Product. Esto es una buena práctica para evitar duplicidades o errores si otro módulo ya lo ha añadido.
$params['product'] = new Product((int) $params['id_product'], false, (int) $params['id_lang']);: Si el objeto Product no está presente, se crea una nueva instancia de Product utilizando el id_product y el id_lang que sí están disponibles en $params. Luego, se añade esta instancia al array $params bajo la clave product.
Con este cambio, tu función renderProductWidget siempre recibirá un objeto Product completo y cargado, y debería funcionar correctamente en todas las páginas de producto.