Ikoshop Posted November 28 Share Posted November 28 (edited) Salut, Je fais mes premiers pas avec Prestashop (version 8.2) et souhaiterais juste comprendre comment démarrer avec la création d'un module activé par un Hook. J'ai créé un module 'vide' avec Validator (https://validator.prestashop.com/generator#) Je voudrais, dans un premier temps, juste vérifier que le module est appelé, en affichant un alert à l'écran. Ca devrait s'activer au moment de créer un produit (hookActionProductAdd). Donc j'ai juste ajouté une ou deux lignes histoire d'être sûr qu'il soit reconnu. J'ai ajouté le module dans le dossier de Prestashop et l'ai installé et configuré dans le backoffice. Mais lorsque je rajoute un produit au catalogue, il ne se passe rien. Pas moyen de savoir si le hook a fait quelque chose, si le module est compatible ni rien. Comment faire pour debug? A toute fins utiles, le fameux module en PJ ikoproductcreate.zip Edited December 4 by Ikoshop (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 28 Share Posted November 28 Bonjour, c'est un hook d'action et non pas d'affichage, donc rien ne sera affiché à l'écran. Pour savoir s'il est pris en compte, il suffit e provoquer une erreur avec un exit; Link to comment Share on other sites More sharing options...
Ikoshop Posted November 29 Author Share Posted November 29 J'essaie du coup d'écrire un message quelconque dans les logs. Dans la fonction hookActionProductAdd j'ai mis $logger = new FileLogger(0); $logger->setFilename(_PS_ROOT_DIR_.'/var/logs/debug.log'); $logger->logDebug('hello world'); Après avoir rajouté un produit dans le backoffice je regarde dans /var/www/html/var/logs mais il n'y a rien dedans. Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29 Share Posted November 29 Et dans position votre module est bien attaché au hook ? Link to comment Share on other sites More sharing options...
Ikoshop Posted November 29 Author Share Posted November 29 Oui, dans install() public function install() { Configuration::updateValue('IKOPRODUCTCREATE_LIVE_MODE', false); return parent::install() && $this->registerHook('header') && $this->registerHook('displayBackOfficeHeader') && $this->registerHook('actionProductAdd'); } Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29 Share Posted November 29 Ok, là, c'est ce qu'il doit faire, mais le fait-il réellement, c'est pour cela que je vous demande de contrôler dans le menu Positions. Link to comment Share on other sites More sharing options...
Ikoshop Posted November 29 Author Share Posted November 29 (edited) Désole, je n'ai pas compris ce que c'est le menu Positions. Edit: j'ai trouvé. Le module apparaît en 6e position pour le hook actionProductAdd qui apparaît lorsqu'on coche la case pour afficher les hooks non-positionnable. Edited November 29 by Ikoshop (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29 Share Posted November 29 Alors c'est peut-être le chemin du fichier qui n'est pas bon. Link to comment Share on other sites More sharing options...
Ikoshop Posted November 29 Author Share Posted November 29 Possible. J'ai aussi essayé avec PrestaShopLogger::addLog('my log message', 1,null,'Product',3,false,1); mais toujours rien. Aussi bien toute la doc n'est pas à jour pour la 8.2. Il semble compliqué d'avoir des infos claire sur comment ça fonctionne. Merci en tout cas pour votre aide. Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 29 Share Posted November 29 il y a 4 minutes, Ikoshop a dit : PrestaShopLogger::addLog('my log message', 1,null,'Product',3,false,1); C'est dans les logs accessibles par le menu log. Link to comment Share on other sites More sharing options...
Ikoshop Posted November 29 Author Share Posted November 29 Oui, mais ça n'écrit pas dedans. J'y trouve des logs des accès au panel admin généré par le site mais pas le log que je force dans la fonction. J'en conclus que le hook n'est toujours pas déclenché malgré tout. Link to comment Share on other sites More sharing options...
Prestashop Addict Posted November 29 Share Posted November 29 Vous êtes en serveur local ? Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 C'est une installation sur Docker, en local, oui. Link to comment Share on other sites More sharing options...
Prestashop Addict Posted December 2 Share Posted December 2 Utilisez un deboggueur PHP en local Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 Le 28/11/2024 à 5:24 PM, Ikoshop a dit : Mais lorsque je rajoute un produit au catalogue, il ne se passe rien. Pas moyen de savoir si le hook a fait quelque chose, si le module est compatible ni rien. Comment faire pour debug? je n'ai pas testé sur PS8 mais 1.6 et $params de la fonction hookActionProductAdd me renvoi Array ( [id_product] => 8 [product] => Array ( [tax_name] => [tax_rate] => [id_manufacturer] => 0 [id_supplier] => [id_category_default] => 2 [id_shop_default] => 1 [manufacturer_name] => [supplier_name] => [name] => Array ( [1] => seffdsd [2] => ) [description] => Array ( [1] => [2] => ) [description_short] => Array ( [1] => [2] => ) [quantity] => 0 [minimal_quantity] => 1 [available_now] => [available_later] => [price] => 0 [specificPrice] => 0 [additional_shipping_cost] => 0 [wholesale_price] => 0.00 [on_sale] => 0 [online_only] => 0 [unity] => [unit_price] => 0.000000 [unit_price_ratio] => 0 [ecotax] => 0 [reference] => fsd [supplier_reference] => [location] => [width] => 0 [height] => 0 [depth] => 0 [weight] => 0 [ean13] => [upc] => [link_rewrite] => Array ( [1] => seffdsd [2] => ) [meta_description] => Array ( [1] => [2] => ) [meta_keywords] => Array ( [1] => [2] => ) [meta_title] => Array ( [1] => [2] => ) [quantity_discount] => 0 [customizable] => [new] => [uploadable_files] => [text_fields] => [active] => 1 [redirect_type] => 404 [id_product_redirected] => 0 [available_for_order] => 1 [available_date] => 0000-00-00 [condition] => new [show_price] => 1 [indexed] => 0 [visibility] => both [date_add] => 2024-12-02 16:22:09 [date_upd] => 2024-12-02 16:22:09 [tags] => [base_price] => [id_tax_rules_group] => 8 [id_color_default] => 0 [advanced_stock_management] => 0 [out_of_stock] => [depends_on_stock] => [isFullyLoaded] => [cache_is_pack] => [cache_has_attachments] => [is_virtual] => [id_pack_product_attribute] => [cache_default_attribute] => [category] => [pack_stock_type] => 3 [id] => 8 [id_shop_list] => [force_id] => ) [cookie] => Array ( ) [cart] => [altern] => 6 ) Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 Ce serait possible d'avoir une copie du module qui utilise ce hook? Même juste une ligne? Juste pour voir si ça fonctionne ou non sous 8.2 Merci Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 c'est ton module 🤣 j'ai juste modifié ça: public static function jsonEncode($data, $options = 0, $depth = 512) { return json_encode($data, $options, $depth); } public function hookActionProductAdd($params) { $p = $this->jsonEncode($params); Configuration::updateValue('xxx', $p); // Get the created product object $product = $params['object']; ensuite je vais voir xxx dans la table configuration Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 C'est la table ps_configuration dans la base prestashop ? Ou je suis à côté de la plaque? Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 c'est bien ça, sinon tu peux utiliser un module gratuit comme https://www.coeos.pro/fr/modules-prestashop/41-table-viewer.html Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 je regarde la table avec myphpadmin mais le fait d'ajouter un produit en backoffice n'ajoute rien à la table en question. Je remplace 'xxx' par la valeur d'une ligne de la colonne 'name' dans le fichier PHP, c'est bien ça? Configuration::updateValue('STOCKCHANGEIKOSOFT_ACCOUNT_EMAIL', $p); et la valeur '[email protected]' devrait être remplacée par une chaîne json décrivant le produit lorsque je rajoute un nouveau dans le backoffice? Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 en fait xxx c'est vraiment xxx, sinon met new_product: Configuration::updateValue('new_product', $p); Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 il y a 25 minutes, Ikoshop a dit : et la valeur '[email protected]' devrait être remplacée par une chaîne json décrivant le produit lorsque je rajoute un nouveau dans le backoffice? oui Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 J'ai vraiment du mal. L'interface de prestashop 8.2 est complètement différent. Je ne comprends pas où doit se trouver le xxx ou le new_product, que ce soit ici ou dans la base (table ps_configuration) ou si le UpdateValue en PHP doit faire référence à une valeur existant... Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 là c'est la configuration de ton module, new_product c'est juste pour répondre à ton premier message et qui semble encore en suspend : Le 28/11/2024 à 5:24 PM, Ikoshop a dit : il ne se passe rien. Pas moyen de savoir si le hook a fait quelque chose, j'ai juste modifié le module pour vérifier si le hook était bien appelé (sur 1.6) en rajoutant Configuration::updateValue('new_product', $p); et dans la bdd on a bien le contenu de $params, donc l'appel du hook est bon et les valeurs envoyées sont bonnes, si il ne se passe rien ensuite, vérifie le code qui suit la ligne Configuration::updateValue('new_product', $p); Link to comment Share on other sites More sharing options...
Ikoshop Posted December 2 Author Share Posted December 2 Dans la bdd j'ai strictement rien, malheureusement. Donc si, avec le même code, ça écrit dans la base en version 1.6 c'est que toute la structure a changé depuis et je perds mon temps à essayer de le faire marcher en 8.2. Link to comment Share on other sites More sharing options...
coeos.pro Posted December 2 Share Posted December 2 essaye ton module sur 1.6, la 8 a des bugs assez hallucinant Link to comment Share on other sites More sharing options...
Ikoshop Posted December 3 Author Share Posted December 3 (edited) J'ai effacé la version 8.2 et installé la version 1.7. Comportement identique - rien écrit dans les logs, ni dans ps_configuration et je n'ai pas de résultats pour 'xxx' public function hookActionProductAdd($params) { $p = $this->jsonEncode($params); Configuration::updateValue('xxx', $p); // Get the created product object $product = $params['object']; } alors j'ai tout effacé et installé la 1.6... et là, impossible de d'accéder au serveur alors que le fichier docker.compose.yml contient les mêmes infos de connexion J'en suis à ma 6ème installation, c'est une pure angoisse ce truc! Edited December 3 by Ikoshop (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted December 3 Share Posted December 3 tu as bien rajouté la fonction jsonEncode dans ton module public static function jsonEncode($data, $options = 0, $depth = 512) { return json_encode($data, $options, $depth); } Link to comment Share on other sites More sharing options...
Ikoshop Posted December 3 Author Share Posted December 3 tout à fait Link to comment Share on other sites More sharing options...
Ikoshop Posted December 3 Author Share Posted December 3 Alors, sur un conseil trouvé sur un autre forum, j'ai changé de hook, remplaçant hookActionProductAdd par hookActionProductSave et greffant ce hook au module et là, d'un coup ça fonctionne - le JSON du produit est bien écrit dans la base configuration. (J'avais aussi testé cette hypothèse avec la version 8.2 sans succès) Pour le coup, c'est génial de voir enfin quelque chose qui fonctionne! Mais d'autre part il faut en conclure qu'au fil des versions on perd en fonctionnalité. De la 1.6 à la 1.7 le hook 'Add' ne fonctionne plus et en passant à la 8.2 plus aucun hook ne marche... c'est consternant. Comment écrire un module qui fonctionnera quel que soit la version? En tout merci infiniment pour l'aide ! Link to comment Share on other sites More sharing options...
coeos.pro Posted December 3 Share Posted December 3 il y a 2 minutes, Ikoshop a dit : j'ai changé de hook, remplaçant hookActionProductAdd par hookActionProductSave ensuite ça dépend de ce que tu veux faire, après l'ajout d'un nouveau produit ou la modification d'un produit il y a 2 minutes, Ikoshop a dit : Comment écrire un module qui fonctionnera quel que soit la version? c'est pour ça que l'on fait régulièrement des mises à jour des modules, et il faut tester les modules sur plusieurs versions pour être sûre Link to comment Share on other sites More sharing options...
Divine Posted December 4 Share Posted December 4 Link to comment Share on other sites More sharing options...
Mediacom87 Posted December 4 Share Posted December 4 Vous pouvez regarder les hook disponible directement dans la doc https://devdocs.prestashop-project.org/8/modules/concepts/hooks/list-of-hooks/ C'est assez pratique, après, il faut comprendre comment ils sont déclenchés et les données transmises. Link to comment Share on other sites More sharing options...
coeos.pro Posted December 4 Share Posted December 4 Il y a 2 heures, Mediacom87 a dit : Vous pouvez regarder les hook disponible directement dans la doc https://devdocs.prestashop-project.org/8/modules/concepts/hooks/list-of-hooks/ dans cette liste ActionProductAdd est indiqué comme dans le FO... Link to comment Share on other sites More sharing options...
Ikoshop Posted December 4 Author Share Posted December 4 Tout à fait, dans la version 8 c'est dans le FO ce qui suggère qu'il se déclenche lors de l'ajout au panier d'un produit. Alors que dans le 1.7 c'est dans le BO (Admin) et fait référence à l'ajout d'un produit à un catalogue (création). 1.7 actionProductAdd This hook is displayed after a product is created Located in: /controllers/admin/AdminProductsController.php Link to comment Share on other sites More sharing options...
coeos.pro Posted December 4 Share Posted December 4 quand tu cliques dessus : https://devdocs.prestashop-project.org/8/modules/concepts/hooks/list-of-hooks/actionproductadd/ il y a bien marqué : Product creation This hook is displayed after a product is created et que j'avais indiqué ici était bien sur la création d'un nouveau produit, à mon avis c'est une erreur c'est uniquement BO, ils ont du confondre avec l'ajout d'un produit dans le panier (actionCartSave) 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