Hola @samuel_es y @albertolab10,
@samuel_es, @albertolab10 tiene razón. Estás en lo cierto al buscar una solución más robusta para PrestaShop 1.7.0.4. El problema con tu sobreescritura es que el ID del pedido (id_order) se pasa al Smarty a través de los $params del hookDisplayOrderConfirmation, no siempre como un parámetro GET/POST que puedas recoger directamente con Tools::getValue() en initContent de tu override. Además, intentar cargar el objeto Order tan temprano en el controlador puede llevar a errores si el ID no está disponible.
La forma correcta y más mantenible de añadir scripts de seguimiento en la página de confirmación es mediante el hook displayOrderConfirmation dentro de un módulo. Este hook te proporciona directamente el objeto Order completo, lo que simplifica mucho la obtención de los datos necesarios. Así es como se haría en un módulo:
// Dentro de la clase de tu módulo (por ejemplo, en MyShopmaniaModule.php)
public function hookDisplayOrderConfirmation($params)
{
if (isset($params['objOrder']) && Validate::isLoadedObject($params['objOrder'])) {
$order = $params['objOrder'];
$this->context->smarty->assign(array(
'shopmania_order_id' => $order->id,
'shopmania_total_paid' => $order->total_paid_tax_incl,
'shopmania_currency' => $this->context->currency->iso_code
));
// Renderiza un archivo .tpl específico de tu módulo que contenga el script de Shopmania
return $this->display(__FILE__, 'views/templates/hook/shopmania_tracking.tpl');
}
return '';
}
Aquí, $params['objOrder'] ya contiene el objeto del pedido cargado, eliminando la necesidad de Tools::getValue y new Order($id_order). Luego, en views/templates/hook/shopmania_tracking.tpl (dentro de tu módulo), incluirías el script de Shopmania usando estas variables asignadas.
Aunque esta es la forma 'manual' correcta de hacerlo, para evitar líos con módulos y mantener el código limpio en futuras actualizaciones, a menudo es más eficiente usar una herramienta de integración de shopmania dedicada. Estos módulos están diseñados para manejar todos estos detalles y se actualizan con PrestaShop, asegurando compatibilidad.