Bonjour,
Existe-il un moyen de savoir quel sont les hooks qui sont appellés de manière dynamique ?
Je développe un module qui doit injecter du contenu lors de l'appel au hook order-delivery.extra mais sans succès jusqu'à maintenant.
Le fichier config est les suivant
<hooks>
<hook id="hook.front.shop_pickup_date" class="ShopPickupDate\Hook\ShopPickupDateFrontHook" scope="request">
<tag name="hook.event_listener" type="front" event="account-order.after-addresses" method="onAccountOrderAfterAddresses"/>
<tag name="hook.event_listener" type="front" event="order-delivery.extra" method="onDeliverySelection" />
</hook>
<hook id="hook.shop_pickup_delivery_info" class="ShopPickupDate\Hook\ShopPickupDateBackHook" scope="request">
<tag name="hook.event_listener" type="back" event="order-edit.delivery-module-bottom" method="onOrderDeliveryModuleBottom" />
</hook>
</hooks>
La classe est la suivante
<?php
namespace ShopPickupDate\Hook;
use Thelia\Core\Hook\BaseHook;
use Thelia\Core\Event\Hook\HookRenderEvent;
use Thelia\Core\Event\Hook\HookRenderBlockEvent;
use ShopPickupDate\ShopPickupDate;
use ShopPickupDate\Model\ShopPickupDateQuery;
use Thelia\Model\OrderQuery;
use LocalPickup\LocalPickup;
/**
* Class ShopPickupDateHook
* @package ShopPickupDateHook\Hook
* @author Nicolas Léon - Omnitic <nicolas@omnitic.com>
*/
class ShopPickupDateFrontHook extends BaseHook
{
/*
* Display pickup date info on account order screen
*
*/
public function onAccountOrderAfterAddresses(HookRenderEvent $event)
{
$order = OrderQuery::create()->findPk($event->getArgument('order'));
if(LocalPickup::getModuleId() == $order->getDeliveryModuleId()) {
$shop_pickup_date = ShopPickupDateQuery::create()->findOneByOrderId($order->getId());
if($shop_pickup_date) {
$pickup_date = $shop_pickup_date->getPickupDate('d/m/Y');
} else {
$pickup_date = null;
}
$event->add(
$this->render(
'ShopPickupDate/account-order-pickup-date.html',
[
'pickup_date' => $pickup_date,
]
)
);
}
}
/*
* Display the date pickup selector
*/
public function onDeliverySelection(HookRenderEvent $event)
{
if(LocalPickup::getModuleId() == $event->getArgument('module')) {
$exclusions = unserialize(ShopPickupDate::getConfigValue('pickup_exclude_date'));
asort($exclusions);
$event->add(
$this->render(
'ShopPickupDate/date_picker_widget.html',
[
'opening_date' => ShopPickupDate::getConfigValue('pickup_opening_date'),
'exclusions' => $exclusions
]
)
);
}
}
}
Le hook account-order.after-addresses fonctionne bel et bien. Par contre Thelia ne semble pas prendre en compte ma déclaration de order-delivery.extra. La méthode onDeliverySelection n'est pas appellée.
Dans la base de données les informations du hook sont présentes.
Vider le cache et "nettoyer" les hook (php Thelia hook:clean) restent sans effet....
Quelqu'un a déjà rencontré ce problème ?
Edit :
J'utilise la version 2.4 de Thelia
En déplaçant l'appel du hook ({hook name="order-delivery.extra" module="$ID"} ) de /templates/ajax/order-delivery-module-list.html vers /templates/oder-deliverty.html le hook est bien appellé (mais logiquement le paramètre module n'est pas renseigné dans ce cas)
Last edited by Nog (18-10-2021 11:47:02)