Buenas, @raul_bcn. @anadigital y @martabici han dado con los puntos clave. La inyección directa de HTML y JavaScript en un método de hook de PHP, aunque 'funciona' en algunos casos, es una práctica que PrestaShop 9 y PHP 8.x desaconsejan fuertemente por razones de rendimiento, seguridad y mantenibilidad.
El problema es que PrestaShop no tiene control sobre los scripts que devuelves directamente. No puede gestionarlos con su sistema de caché, minificación o carga asíncrona. La solución correcta pasa por:
- Registrar el JavaScript de Facebook SDK usando
Context::registerJavascript().
- Renderizar el contenido HTML del widget a través de un archivo de plantilla
.tpl de Smarty, el cual se cargará desde el hook.
Aquí te muestro cómo podrías reestructurar tu hookDisplayFooter en tu módulo, asumiendo que el archivo facebook_like_box.tpl se encuentra en views/templates/hook/ dentro de tu módulo:
public function hookDisplayFooter($params)
{
// Registrar el SDK de Facebook de forma asíncrona
$this->context->controller->registerJavascript(
'facebook-sdk',
'https://connect.facebook.net/es_ES/sdk.js#xfbml=1&version=v19.0&appId=TU_APP_ID&autoLogAppEvents=1',
['server' => 'remote', 'position' => 'bottom', 'priority' => 10, 'async' => true, 'defer' => true, 'crossorigin' => 'anonymous']
);
// Renderizar la plantilla que contiene el div del widget
return $this->display(__FILE__, 'views/templates/hook/facebook_like_box.tpl');
}
Y el contenido de views/templates/hook/facebook_like_box.tpl sería:
<div id="fb-root"></div>
<div class="fb-page" data-href="https://www.facebook.com/TuPaginaDeFacebook/" data-tabs="timeline" data-width="340" data-height="130" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/TuPaginaDeFacebook/" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/TuPaginaDeFacebook/">Tu Página de Facebook</a></blockquote></div>
Con esto, PrestaShop gestionará la carga del script de forma optimizada. Sin embargo, para una solución más robusta y que no tengas que mantener manualmente con cada actualización de PrestaShop o cambio de tema, te recomendaría un módulo dedicado. Por ejemplo, el módulo Caja de Me gusta de Facebook gratuita hace exactamente esto de forma profesional y con opciones de configuración desde el Back Office, evitando tocar código directamente.