Jump to content

Changement dynamique de groupe pour les visiteurs ?


fredopahu

Recommended Posts

Bonjour à tous,

Je me pose une question sans réponse pour le moment, peut être allez vous pouvoir m'aider:

J'ai besoin de proposer 2 affichages de prix différents aux visiteurs sans compte (switch de l'un à l autre via un paramètre URL par ex, cette partie est hors périmètre de la question).

Exactement comme si je créais 2 groupes avec des réductions différentes et que l'utilisateur puisse prévisualiser le site comme si il était membre d'un groupe, puis de l'autre (ex : voir les prix publics, puis voir les prix pour les membres)

D'après ce que j'ai compris, on ne peut affecter un groupe qu'à un utilisateur disposant d'un compte, est-ce vrai ?

N'est-il pas possible de changer via php le groupe par défaut d'un visiteur ? uniquement pour sa session.


PS: je peux développer, j'ai simplement besoin d'une piste ou idée, ou qu'on me souffle la variable/fonction à trifouiller pour y arriver :)

Merci d'avance.

Si le message n'est pas clair, n'hésitez pas à le dire.

Link to comment
Share on other sites

tu aurais du poser ta question rubrique "développement".

Un modo, va sûrement déplacer le sujet.

Néanmoins :
il est impossible (je pense) de faire ce que tu veux sans dev.
Pour ta "variable" je te conseil d'utiliser la variable cookie de prestashop (et non de PHP).
Tu pourras grâce a cette variable modifier la fonction getStaticPrice pour afficher le prix que tu as besoin avec la réduction que tu as besoin.

Link to comment
Share on other sites

Merci pour ces premiers éléments de réponse.

se servir de la variable cookie de presta, OK je sais faire à priori.
Par contre, tu dis de modifier la fonction getStaticPrice, via la variable cookie ?
Est-ce qu'il y a possibilité de placer une sorte de hook sur la fonction ? ou j'ai mal compris ?

Si oui, si tu as des exemples de mise en œuvre, je suis preneur !

Merci

Link to comment
Share on other sites

oui sa change ^^,
tu vas donc devoir faire du spécifique, modifier le coeur de presta.
2 solutions,

1 --> comme un bourrin directement dans la classe Product
2 --> créer une classe a coté, qui surcharge la fonction quand tu en as besoin.

Après tout dépend de comment du fais compte gérer la modification de prix. c'est en %? en valeur ? ou aucune relation entre l'ancien et le nouveau prix ?

Link to comment
Share on other sites

Oui ce sera du %, donc théoriquement assez simple à réaliser si on sait où trifouiller :)
Je vais essayer de chercher des exemples d'override de fonction dans presta, par contre, c'est la relation avec la variable cookie que je comprends pas et qui semble être très claire pour toi.

J'imagine que la finalité c'est de se servir du cookie pour dire "ok pour cette session, j'utilise la classe surchargée".
Est-ce qu'il y a un truc existant pour faire ça ou est ce que c'est à moi de rajouter un paramètre de cookie et le vérifier directement dans la classe product afin de savoir si on surcharge ou pas ?

Link to comment
Share on other sites

tu renseignes toi même la variable

if(utilisateur_genial == 1){
$cookie->mavariable = 1
}else{
$cookie->mavariable = 2
}



quand ta variable est assigné, dans la fonction getPriceStatic tu peux juste à la fin, avant

self::$_prices[$cacheId] = $price;


modifier la valeur de $price

par exemple

if($cookie->mavariable == 1){
$price = $price * 2;
}



je ne sias plus si on a acces ou pas à la variable cookie dans cette fonction. Si non tu la rajoute :

global $cookie

Link to comment
Share on other sites

Impec, tout est clair dans ma tête, y'a plus qu'à faire.
Pour la première partie, ok c'est ce que je pensais.
Pour le reste, je vais le faire à la façon "bourrin" dans un premier temps, direct dans la classe, histoire de valider le truc :)

Je te tiens au jus ! Merci jherbaux

Link to comment
Share on other sites

Alors...
Ca marche, j'ai plutôt modifié la fonction getReductionValue.

J'ai rajouté ça au tout début

    global $cookie;

   if($cookie->mavariable== 1){
       $reduction_price = 0;
       $reduction_percent = 20;
       }



Le soucis, c'est que ça ne modifie pas la variable $product->reduction_percent (elle reste à 0) et donc l'affichage sur tout le site n'est pas optimisé (prix barrés, fiche produit/rayon, etc...)

J'ai passé la soirée à chercher comment modifier "en dur" cette variable depuis la classe mais tous mes tests ont échoué.
Je n'ai pas trouvé dans quelle fonction il va sortir les infos de la BDD pour les mettre dans cette variable, ni les autres d'ailleurs.

Je peux bien sûr faire un $product->reduction_percent = 20; dans les fichiers product.php, category.php etc... mais je préférerai le faire une seule fois "à la source" dans la classe :)

Une idée ?

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