Jump to content

[RESOLU] Changer le hook d'un module


Recommended Posts

Bonjour à tous, 

Je viens d'installer un module Sofinco sur mon site Prestashop.
Seulement, aujourd'hui la disposition ne me convient pas dans le panier, il est actuellement placé dans le hook "displayShoppingCart", alors que j'aimerais le placer dans le "displayShoppingCartFooter"

J'ai regardé les hook disponibles du module dans le backoffice, mais il n'y ait pas.
Le service client m'a dit que je devais moi même aller modifier le code du module.

Étant un ancien dev, j'ai mis mon nez dans le code pour voir si je pouvais facilement rajouter le hook, seulement, j'ai cherché le terme "displayShoppingCart" dans mon module, mais rien, impossible de trouver quelque chose en rapport avec ça.
Je me suis demandé s'il n'utilisait pas la classe pour se positionner, j'ai donc aussi cherché "cart-summary" mais idem, rien.

Le truc le plus ressemblant que j'ai trouvé c'est la déclaration d'un "hookShoppingCartExtra"

public function hookShoppingCartExtra() {
    if ($this->isPaymentAvailable() && $this->context->cart->getOrderTotal() >= (float) Configuration::get("SOFINCOSE_PRODUCT_MINPRICE_DISPLAY")) {
        $urlSimulator = $this->getSimulatorUrl($this->context->cart->getOrderTotal());
        $this->smarty->assign(array(
            "urlSimulator" => $urlSimulator,
            "displayIframe" => false
        ));
        return $this->display(__FILE__, "displaySimulatorCartPage.tpl");
    }
}

Est-ce que quelqu'un aurait une piste à me filer s'il vous plaît ?
Je n'ai jamais dev du prestashop, mais ça me semble étrange que le module arrive à se positionner tous seul par magie sans que quelque part on lui en donne l'autorisation 😅

 

En vous remerciant !

Capture d’écran 2025-01-23 à 00.55.36.png

Capture d’écran 2025-01-23 à 01.10.30.png

Edited by juliensl
Problème résolu (see edit history)
Link to comment
Share on other sites

Bonjour à tous les deux, 

Merci pour vos retours.

Mon problème, c'est que je ne comprends pas comment lui indiquer un emplacement :/ 
Je n'ai aucune idée des paramètres à indiquer pour lui faire comprendre que je veux qu'il aille se placer dans le cartFooter ><

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous les 2, 

Merci pour vos réponses :) 
Désolé pour le temps de réponse interminable.

J'ai fini par comprendre !!!!!!

image.thumb.png.16802ba869059562e963b871d49857ea.png

Enfaite, ce que je ne comprenais pas c'est qu'à priori, la position displayShoppingCart dans le panneau d'administration position de prestashop est représenté par le hook hookShoppingCartExtra.
Pourquoi est-ce qu'ils n'ont pas utilisé le même nom ? x)

Une fois que j'ai compris ça, il m'a suffit de dupliquer le code en changeant le nom du hook et c'était plié

Hook original : 
	public function hookShoppingCartExtra() {
        if ($this->isPaymentAvailable() && $this->context->cart->getOrderTotal() >= (float) Configuration::get("SOFINCOSE_PRODUCT_MINPRICE_DISPLAY")) {
            $urlSimulator = $this->getSimulatorUrl($this->context->cart->getOrderTotal());
            $this->smarty->assign(array(
                "urlSimulator" => $urlSimulator,
                "displayIframe" => false
            ));
            return $this->display(__FILE__, "displaySimulatorCartPage.tpl");
        }
    }

Mon hook : 
    public function hookDisplayShoppingCartFooter() {
        if ($this->isPaymentAvailable() && $this->context->cart->getOrderTotal() >= (float) Configuration::get("SOFINCOSE_PRODUCT_MINPRICE_DISPLAY")) {
            $urlSimulator = $this->getSimulatorUrl($this->context->cart->getOrderTotal());
            $this->smarty->assign(array(
                "urlSimulator" => $urlSimulator,
                "displayIframe" => false
            ));
            return $this->display(__FILE__, "displaySimulatorCartPage.tpl");
        }
    }

Je suis content, c'est beaucoup mieux comme ça :) 

 

J'ai essayé de reproduire le processus sur ma page produit

image.thumb.png.643b3142675dc59e7365098ebfd47cff.png

Voici le code que j'ai maintenant 

Déjà présent : 
	/**
     * Display simulator in product page.
     */
    public function hookExtraRight() {
        if ($this->isPaymentAvailable()) {
            $prd = new Product(Tools::getValue("id_product"));

            if ($prd->getPrice() >= (float) Configuration::get("SOFINCOSE_PRODUCT_MINPRICE_DISPLAY")) {

                $urlSimulator = $this->getSimulatorUrl($prd->getPrice());
                $this->smarty->assign(array(
                    "urlSimulator" => $urlSimulator,
                    "displayIframe" => false
                ));
                return $this->display(__FILE__, "displaySimulatorProductPage.tpl");
            }
        }
    }

    public function hookDisplayProductAdditionalInfo($params) {
        return $this->hookExtraRight();
    }

Ce que j'ai rajouté : 
    public function hookDisplayProductPriceBlock($params) {
        return $this->hookExtraRight();
    }

Le problème, c'est qu'il m'affiche le module en X3 🤣

image.thumb.png.2556822602f33f4df469c2a5a8715118.png

 

D'après ce que je comprends, il y a 3 "types" différent dans "displayProductPriceBlock" et il faut que je lui indique lequel je veux, mais j'ai pas compris comment faire 😕

Un petit coup de main serait le bienvenue s'il vous plaît 😁

 

En vous remerciant et en vous souhaitant une bonne journée !

Link to comment
Share on other sites

Bonjour, si vous avez fait un override propre du module, vous pouvez faire comme ceci : 

public function hookDisplayShoppingCartFooter() {
        return hookShoppingCartExtra();
    }

Pour ce qui est de la fiche produit en effet, il y a plusieurs types (unit_price, after_price, weight,....), le mieux serait d'utiliser le hook. displayProductAdditionalInfo

  • Like 1
Link to comment
Share on other sites

Bonjour @CHRISCOM

Merci pour ta réponse.

Oui, idéalement il vaudrait mieux utiliser displayProductAdditionalInfo, mais le module Alma ne le permet pas nativement.
J'ai fouillé dans le code pour voir si je comprennais comment c'était fait dans ce module mais ça m'a l'air très compliqué.
C'est pas parfait, mais je préfère remonter le module Sofinco à côté du Alma, ça a priori je devrais y arriver assez facilement, je ne souhaite pas consommer plus de temps là dessus.

Comment dois-je faire pour lui indiqué le type? J'ai essayé comme ça mais ça n'a pas l'air bon x)

    public function hookDisplayProductPriceBlock($params) {
        return $this->hookExtraRight($params['type'], ['price', 'after_price']);
    }

Merci pour votre aide

Link to comment
Share on other sites

@CHRISCOM

J'ai trouvé ! 

Enfin, Codium a trouvé 😂

Comme ça ça fonctionne

    public function hookDisplayProductPriceBlock($params) {
        if ($params['type'] == 'after_price') {
            return $this->hookExtraRight();
        }
    }

En vous remerciant tous les 2 pour votre aide et en vous souhaitant un bon weekend ! :) 

Link to comment
Share on other sites

  • juliensl changed the title to [RESOLU] Changer le hook d'un module

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...