Jump to content

[RESOLU] Hook n'est pas déclenché?


Recommended Posts

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 by Ikoshop (see edit history)
Link to comment
Share on other sites

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

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

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.
image.png.a60c3fddc7922f4542ecd785aa879061.png

image.thumb.png.46b3cfcc6f235a195c3fc00d7b88d330.png

Edited by Ikoshop (see edit history)
Link to comment
Share on other sites

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

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

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

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

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?
image.thumb.png.c36c18cd2d6297c2c07d08733fb16ba4.png

 

Link to comment
Share on other sites

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...

image.thumb.png.2efaa0eccf47d45d1faa34d9fdd22832.png

Link to comment
Share on other sites

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

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

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' 

 

image.thumb.png.2628204bd14b9c550cb57a78c3510a79.png


    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


image.thumb.png.3ad66f76b7b6076ddcdc5dca75627563.png

J'en suis à ma 6ème installation, c'est une pure angoisse ce truc!
 

Edited by Ikoshop (see edit history)
Link to comment
Share on other sites

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

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

  • Ikoshop changed the title to [RESOLU] Hook n'est pas déclenché?

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

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

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...