THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


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)

Offline


1) Vide le cache
2) Regarde dans le log Thelia s'il n'y a pas une erreur au moment ou les hooks sont traités
3) Si ce n'est pas le cas, essaie un Thelia hool:clean LeNomDeTonModule, qui va RAZ puis reconstruire les hooks de ton module.


OpenStudio Toulouse