Hola @monica_admin y @albertolab10, el problema que describes con la carga de datos en initContent() de un ProductController override es común en PrestaShop 1.7.x. Aunque el id_product suele estar disponible, initContent() es más para la preparación del entorno de renderizado, no tanto para la lógica de negocio de recuperación de datos específicos del producto.
Una solución mucho más robusta y limpia es utilizar los hooks de PrestaShop, específicamente displayProductExtraContent. Este hook está diseñado para añadir bloques de contenido adicionales en la página del producto sin necesidad de overrides complejos de controlador que pueden romperse con las actualizaciones del core.
Aquí te muestro cómo podrías implementarlo dentro de un módulo personalizado. Esto te permitiría engancharte en el lugar correcto, con el objeto product ya inicializado y validado, lo que te da acceso seguro al id_product:
// En tu archivo principal del módulo, por ejemplo, /modules/mimodulobloques/mimodulobloques.php
public function hookDisplayProductExtraContent(array $params)
{
if (isset($params['product']) && Validate::isLoadedObject($params['product'])) {
$id_product = (int)$params['product']->id;
// Aquí cargarías tus bloques de contenido personalizados
$customBlocks = Db::getInstance()->executeS(
'SELECT * FROM `' . _DB_PREFIX_ . 'custom_product_blocks` WHERE id_product = ' . $id_product
);
if (!empty($customBlocks)) {
Este código iría en la clase principal de tu módulo. Luego, necesitarías crear el archivo views/templates/hook/product_extra_blocks.tpl dentro de tu módulo para renderizar el contenido de $product_custom_blocks. Este enfoque es mucho más mantenible que un override de controlador y te protege de futuras actualizaciones. Para una solución más completa y sin necesidad de codificar, puedes considerar un módulo dedicado como esta solución para bloques de contenido que te permite gestionar estos bloques directamente desde el Back Office.