juliensl Posted January 23 Share Posted January 23 (edited) 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 ! Edited February 1 by juliensl Problème résolu (see edit history) Link to comment Share on other sites More sharing options...
CHRISCOM Posted January 23 Share Posted January 23 Je te conseille de faire un override du module par exemple: <?php public function hookDisplayShoppingCartFooter($params) { return $this->hookDisplayShoppingCart($params) } 1 Link to comment Share on other sites More sharing options...
Prestashop Addict Posted January 23 Share Posted January 23 Les hooks sont enregistrés à l'installation avec le fonction registerhook 1 Link to comment Share on other sites More sharing options...
juliensl Posted January 23 Author Share Posted January 23 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 More sharing options...
CHRISCOM Posted January 23 Share Posted January 23 Il faut ajouter un override du module et greffer le module sur le hook hookDisplayShoppingCartFooter Link to comment Share on other sites More sharing options...
Prestashop Addict Posted January 23 Share Posted January 23 Est-ce que le module Sofinco est en : extends Module implements WidgetInterface Link to comment Share on other sites More sharing options...
juliensl Posted January 31 Author Share Posted January 31 Bonjour à tous les 2, Merci pour vos réponses Désolé pour le temps de réponse interminable. J'ai fini par comprendre !!!!!! 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 : 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 🤣 : 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 More sharing options...
CHRISCOM Posted February 1 Share Posted February 1 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 1 Link to comment Share on other sites More sharing options...
juliensl Posted February 1 Author Share Posted February 1 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 More sharing options...
juliensl Posted February 1 Author Share Posted February 1 @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 More sharing options...
CHRISCOM Posted February 2 Share Posted February 2 Super ! Ravi d'avoir pu t'aider ! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now