Hola @miriamdev,
El problema que describes es muy común con widgets de terceros que dependen de SDKs externos. El código que muestras en facebook_group_widget.tpl está intentando cargar el SDK de Facebook y el div del widget al mismo tiempo en el footer. Aunque async y defer ayudan, no garantizan que el SDK haya inicializado completamente el procesamiento del xfbml antes de que el navegador lea tu div.
La forma correcta en PrestaShop 9 es separar la carga del SDK de Facebook y la inserción del div del widget. El SDK debe cargarse de manera controlada, preferiblemente en el header (o al menos en el bottom con priority baja) usando registerJavascript, y el div del widget puede ir en el footer o donde necesites.
Aquí te muestro cómo podrías registrar el script de forma más robusta en tu método hookDisplayHeader de tu módulo:
public function hookDisplayHeader($params)
{
if (!$this->active) {
return '';
}
$this->context->controller->registerJavascript(
'modules-myfacebookwidget-sdk',
'https://connect.facebook.net/es_ES/sdk.js#xfbml=1&version=v18.0',
['position' => 'bottom', 'priority' => 100, 'async' => true, 'defer' => true, 'attributes' => 'crossorigin="anonymous"']
);
// Aquí puedes asignar la ID del grupo si el widget se renderiza en un .tpl diferente
$this->context->smarty->assign([
'facebook_group_id' => Configuration::get('MYMODULE_FB_GROUP_ID'),
]);
// Si el div del widget va en el header, lo renderizas aquí
// return $this->display(__FILE__, 'views/templates/hook/facebook_group_widget_header.tpl');
}
Y luego, en tu hookDisplayFooter (o en otro hook donde quieras el widget visible), solo tendrías el div:
<div class="fb-group" data-href="https://www.facebook.com/groups/{$facebook_group_id}" data-width="280" data-show-metadata="false"></div>
De esta forma, el SDK de Facebook se carga en el momento adecuado por el sistema de PrestaShop, y cuando el div del widget aparece en el DOM, el SDK ya debería estar listo para procesarlo. Sin embargo, para una tienda en producción y evitar estos quebraderos de cabeza con cada actualización o cambio de tema, la solución más limpia y mantenible es siempre un módulo dedicado. Para esto, te recomiendo que eches un vistazo a esta solución para únete al grupo que gestiona todas estas peculiaridades por ti.