Jump to content

[Résolu] - Réduction lors de l'ajout d'un produit spécifique au panier


JulienPct

Recommended Posts

Bonjour,

 

Mon site sous PS 1.7.7 possède un produit qui est une carte de membre élite.

Lors de la validation de l'achat de cette carte, l'utilisateur est ajouté à un groupe "Elite" qui lui permettra de bénéficier d'un grand nombre de réductions.

J'aimerais que, lorsque ce client ajoute cette carte à son panier, il soit considéré en tant que membre du groupe "Elite" et, par conséquent, que son panier soit mis à jour en tant que tel.

 

Exemple : 

T-Shirt : Prix normal : 15€

               Prix Elite : 10€

Je suis un nouveau client qui n'est pas Elite, j'ajoute mon T-shirt à mon panier qui est donc de 15€.

Je trouve que devenir Elite c'est cool, alors je mets la carte dans mon panier.

Mon panier est alors mis à jour pour ne valoir plus que 10€.

 

Bien évidemment, toutes les réductions du groupe Elite devront être prises en compte et non pas une seule.

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

Ca demande un contrôle.

L'idée serait de créer un groupe "Elite en attente" qui aurait les mêmes réductions.

Dans la fonction cart->update() (ou sur ce hook) mettre un code qui:

- Si le client appartient au groupe Elite, on ne fait rien

- Si il n'y appartient pas, on check ses groupes et on le retire du groupe "Elite en attente" si il y était et que son panier ne comporte pas ou plus la carte

- Si il n'y appartient pas et que son panier comporte la carte, on l'ajoute au groupe "Elite en attente"

 

Ca tient en une dizaine de lignes ;) 

Link to comment
Share on other sites

J’y ai effectivement pensé mais lorsque je le register et que je vais dans son appel dans mon module, a partir du moment où j’entre le moindre code, le panier fonctionne mais l’ajax casse (ne fais plus rien).

De plus, le hook actionCartSave ne comprend pas de paramètre alors comment récupérer ce panier ?

 

Merci pour vos réponses !

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

7 hours ago, Mediacom87 said:
$this->context

C'est sûr cependant, ne pouvant pas faire de var_dump() dans ce hook, il ne m'est pas d'une grande utilitée.

En gros, si je mets en dump dans mon hook, l'ajax de l'ajout au panier ne marche plus et, par conséquent, le dump ne s'affiche pas.

 

7 hours ago, Mediacom87 said:

tout comme $params à mettre dans tout appel de hook

J'y ai pensé en analysant le hook mais comme expliquer au dessus, je ne peux pas savoir ce qu'il contient exactement.

 

D'ailleurs, faute de frappe, je suis sous PS 1.7.8, on sait jamais même si je ne pense pas que cela change grand chose.

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

  • JulienPct changed the title to Réduction lors de l'ajout d'un produit spécifique au panier

Bonjour,

Je relance ce post car je suis confronté à un problème que je n'avais pas pris en compte.

Mon module marche bien si le client est connecté mais peu importe s'il est elite ou non.

Le problème est qu'une personne n'est pas forcement connectée lorsqu'elle ajoute des produits à son panier car la création de compte se fait au même moment que le paiement de la commande. 

Une idée pour que le panier s'actualise avec les nouveaux prix quand même ?

Link to comment
Share on other sites

Just now, Mediacom87 said:

Il faut que le client soit connecté pour avoir le bon groupe client.

Et dans ce cas ça marche. Je sais bien que comme il n'est pas connecté etc, je ne peux logiquement pas prendre d'id ou autre informations. C'est logique.

Mais est-ce qu'il y aurait un moyen de faire, peu importe la difficulté, afin de changer le prix du panier pour un client même s'il n'est pas connecté ?

Link to comment
Share on other sites

Just now, Eolia said:

Non.

Prestashop ne fait pas dans la divination^^

Je me doute 😅.

Mais il aurait pu, par je ne sais quelle magie, stocker un prix en BDD ou je ne sais où qui serait modifiable le temps qu'il se connecte.

Bref merci de vos réponses !

Link to comment
Share on other sites

  • JulienPct changed the title to [Résolu] - Réduction lors de l'ajout d'un produit spécifique au panier
56 minutes ago, Eolia said:

Maintenant, rien n'empêche dans votre catégorie de cartes VIP de préciser que s'ils sont connectés et qu'il l'ajoutent au panier ils bénéficieront directement des remises associées.

C'est ce que je fais du coup, le problème est maintenant que :

J'ai une variable que j'assigne à smarty dans un hook personnel qui est $message qui vaut : "Vous avez ajouté la carte élite dans votre panier. Pour pouvoir bénéficier de ses avantages, veuillez créer un compte et vous connecter avant de passer la commande."

Cependant, j'aimerais qu'à chaque changement de panier, le hook actionCartSave appel mon hook afin d'assigner ma variable $message à mon message ou null.

C'est donc ce que je fais :

public function hookActionCartSave() { $this->hookDisplayMessageCart(); $this->updatePriceElite(); }

public function hookActionCartSave()
    {
        $this->hookDisplayMessageCart();
        $this->updatePriceElite();
    }

 

Le problème est que :

- si j'actualise la page, mon hook est bien pris en compte

- si je supprime seulement la carte Elite de mon panier sans refresh la page, le hook actionCartSave se lance bien mais il ne rappel pas mon hook personnel.

 

J'espère que je suis clair, même moi je me perds 😅

 

En gros voila mon code :

public function hookDisplayMessageCart() {
        $context = Context::getContext();
        $id_product_elite_card = '5';

        $cart = new Cart($context->cart->id);
        $cartProducts = $cart->getProducts();

        $id_customer = $cart->id_customer;

        $message = "Vous avez ajouté la carte élite dans votre panier. Pour pouvoir bénéficier de ses avantages, veuillez créer un compte et vous connecter avant de passer la commande.";

        foreach ($cartProducts as $cartProduct){
            if ($id_customer == 0 && $cartProduct["id_product"] === $id_product_elite_card) {
                $this->context->smarty->assign(['message' => $message]);
                return $this->context->smarty->fetch($this->local_path.'views/templates/front/cartMessage.tpl');
            }
        }
        return false;
    }

 

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

Si vous voulez qu'il le rappelle il faut le faire en ajax.

Comprenez bien que les tpl, une fois traités et envoyés au client ne sont plus accessibles par le serveur.

Donc perso, je ne mettrai pas ce code dans le hook mais en interceptant la fonction ajaxCart.refresh(); de ajax_cart.js :

Appel de votre fichier ajax, test si la carte est présente, que le client est connecté etc... et retour en injectant le message en js si nécessaire.

  • Like 1
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...