Arlulo Posted December 1, 2016 Share Posted December 1, 2016 (edited) Bonjour, ma boutique tourne sur une version 1.6.0.14 et j'aurais souhaité ajouter une condition pour qu'un visiteur provenant d'un certain site ne soit plus rattaché au groupe visiteur par défaut de prestashop afin qu'il voit immédiatement la remise de 30% que je prévois à ce type de visiteur. Je sais que le groupe visiteur est fixé par la directive PS_UNIDENTIFIED_GROUP. J'ai donc fait un grep -R "PS_UNIDENTIFIED_GROUP" à la racine et cette directive est utilisée dans pas mal de fichiers. Du coup, je ne sais pas trop ou mettre ma condition (s'appuyant sur un $_SERVER['HTTP_REFERER'] pour fixer le bon id de groupe) pour que ça marche. Peut-être que je ne vais pas dans la bonne direction. Espérant avoir été clair. Merci d'avance pour vos suggestions Excellente journée ! Edited December 1, 2016 by lemrao (see edit history) Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted December 29, 2016 Share Posted December 29, 2016 Bonjour, As tu trouvé une solution à ton problème? j'ai un problème similaire et je ne sais plus quoi faire Merci par avance de ta réponse. Peggy Link to comment Share on other sites More sharing options...
Alexandre Carette Posted December 30, 2016 Share Posted December 30, 2016 salut, peut etre en faisant un override du front controller et mettre tout ca dans la fonction init (code specifique a un de mes projets) <?php class FrontController extends FrontControllerCore { public function init() { parent::init(); $context = Context::getContext(); if ($context->cookie->isLogged()){ $customer = $context->customer; $id_customer = $customer->id; $id_group = $customer->id_default_group; $id_customer_profile = Product::getCustomerIdProfile($id_customer); $id_avatar = Product::getCoverId($id_customer_profile); $url_avatar = Image::getImgFolderStatic($id_avatar); self::$smarty->assign('customerID', $id_customer); self::$smarty->assign('customerIDprofile', $id_customer_profile); self::$smarty->assign('customerGroup', $id_group); self::$smarty->assign('customerAvatarID', $id_avatar); self::$smarty->assign('customerAvatarChemin', $url_avatar); } } } Link to comment Share on other sites More sharing options...
Arlulo Posted January 1, 2017 Author Share Posted January 1, 2017 Bonjour et excellente nouvelle année ! J'avais trouvé une solution peut-être pas la plus harmonieuse pour les puristes et j'ai oublié d'en faire part ici. J'utilise volontairement les sessions php plutôt que les cookies pour mon besoin car si le salarié a les cookies désactivés, il ne voit pas sa remise. Je bascule le visiteur sur mon nouveau groupe avec tarif préférentiel (id=5 dans la table ps_group) et lorsqu'il crée un compte client il est également rattaché à ce même groupe plutôt que le groupe client par défaut 'urlpart' est le bout de chaîne correspondant à un bout de l'url que j'analyse. Ainsi je vérifie que urlpart existe dans www.urlpart.com (vous pourrez remplacer urlpart par ce que vous voulez pour votre besoin. classes/Customer.php public function __construct($id = null) { if(session_id() == '' || !isset($_SESSION)) { session_start(); } if ($_SESSION['urlpart'] == 'urlpart') $this->id_default_group = 5; else $this->id_default_group = (int)Configuration::get('PS_CUSTOMER_GROUP'); parent::__construct($id); } classes/Group.php public static function getCurrent() { static $groups = array(); $customer = Context::getContext()->customer; if (Validate::isLoadedObject($customer)) $id_group = (int)$customer->id_default_group; else { if(session_id() == '' || !isset($_SESSION)) { session_start(); } if ($_SESSION["urlpart"] == 'urlpart') $id_group = 5; else if (strpos($_SERVER['HTTP_REFERER'],'urlpart')){ $id_group = 5; $_SESSION["urlpart"] = 'urlpart'; } else $id_group = (int)Configuration::get('PS_UNIDENTIFIED_GROUP'); } if (!isset($groups[$id_group])) $groups[$id_group] = new Group($id_group); if (!$groups[$id_group]->isAssociatedToShop(Context::getContext()->shop->id)) { $id_group = (int)Configuration::get('PS_CUSTOMER_GROUP'); if (!isset($groups[$id_group])) $groups[$id_group] = new Group($id_group); } return $groups[$id_group]; } Enfin dans le fichier header.tpl du thème de ma boutique, j'affiche une fancybox (l'image popup.jpg à la racine de mon serveur web) au visiteur pour lui indiquer sa remise s'il provient du site en question. Je redirige le visiteur sur http://monsite.fr à la fermeture de la fancybox car la site référent ouvre mon site dans une iframe occasionnant des dysfonctionnements du panier. header.tpl {if $smarty.server.HTTP_REFERER|strstr:"urlpart"} {literal} <script type="text/javascript"> $(document).ready(function () { $.fancybox({ 'width': '40%', 'height': '40%', 'autoScale': true, 'transitionIn': 'fade', 'transitionOut': 'fade', 'type': 'iframe', 'href': 'popup.jpg', type: "image", afterClose : function() { top.location.href = 'http://monsite.fr'; } }); }); </script> {/literal} {/if} Un override des classes serait certainement plus propre. Bonne journée ! Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted January 2, 2017 Share Posted January 2, 2017 Bonjour Lemrao, Bonne année!! Merci de ta réponse. Je suis un peu noyée rires!! Si je veux juste faire basculer mes visiteurs sur un groupe (id=10) quelle portion de ton code dois je prendre? Bonne journée et merci par avance Link to comment Share on other sites More sharing options...
Arlulo Posted January 2, 2017 Author Share Posted January 2, 2017 Bonsoir Peggy, Que veux-tu faire exactement et quelle est ta version de Prestashop? Mon 2e code (fonction getCurrent() du script classes/Group.php) analyse si le visiteur provient d'un site dont l'adresse contient "urlpart". Si c'est le cas il est automatiquement basculé au groupe id=5 plutôt que id=1 (groupe visiteur par défaut) Mon 1er code (fonction __Construct() du script classes/Customer.php) assure que le visiteur, lorsqu'il crée un compte client pour régler sa commande (je ne fais pas de commande invité sur ma boutique) est basculé également sur le groupe 5 pour continuer à bénéficier de sa remise une fois enregistré ou connecté car le groupe par défaut d'un client est id=3. Ta boutique offre-t'elle la possibilité de régler une commande sans s'enregistrer (compte invité)? Si ce que tu recherches correspond au fonctionnement qui est le mien et que ta version de PS est 1.6.x.x, tu peux remplacer les fonctions __Construct() et getCurrent() comme je l'ai fait avec 10 au lieu de 5 pour chaque affectation d'id de groupe et évidemment ce que tu veux à la place de urlpart. Le 3e script dans le header.tpl est purement informatif en affichant juste une popup pour afficher un message de bienvenue en indiquant le taux de remise. Bonne soirée Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted January 3, 2017 Share Posted January 3, 2017 Bonjour Lemrao, Merci d'avoir pris du temps pour répondre. c'est ton deuxième code qui m'intéresse mais sans la partie qui fait référence à l'url. Je veux simplement assigner tout mes visiteurs peut importe d'où ils viennent, automatiquement à un autre groupe car j'ai des tarifs dégressifs auquels sinon ils n'ont pas accès. Mais je n'y comprends pas grand chose et je ne sais pas ce qu'il faut faire. Si tu peux m'orienter un peu ce serait vraiment génial. Je te souhaite une excellente journée. Link to comment Share on other sites More sharing options...
Arlulo Posted January 3, 2017 Author Share Posted January 3, 2017 Bonjour Peggy, peut-être que dans ton cas il suffirait juste d'appliquer une remise sur le groupe invité dans le Backoffice (clients->groupe) puisque que tu veux une remise pour tous les visiteurs sans condition? Bonne journée Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted January 3, 2017 Share Posted January 3, 2017 Non malheureusement ce n'est pas la solution mes tarifs dégressifs par quantité sont crée dans un groupe particuliers (id=10) il faut que les visiteurs glissent automatiquement dedans. Il faudrait que je puisse inclure correctement et au bon endroit cette notion PS_UNIDENTIFIED_GROUP=id 10 ou quelquechose de correct en code qui reprend l'idée!! rires!! Bon je vais continuer à regarder je vais bien finir par trouver Merci en tout cas de ton aide et de ton temps. Passe une bonne journée. Link to comment Share on other sites More sharing options...
Arlulo Posted January 3, 2017 Author Share Posted January 3, 2017 (edited) Très bien, dans ce cas voici la fonction d'origine dans laquelle j'ai commenté l'instruction qui vous concerne et rajouté le bon id de groupe sous le commentaire public static function getCurrent() { static $groups = array(); $customer = Context::getContext()->customer; if (Validate::isLoadedObject($customer)) $id_group = (int)$customer->id_default_group; else // $id_group = (int)Configuration::get('PS_UNIDENTIFIED_GROUP'); $id_group = 10; if (!isset($groups[$id_group])) $groups[$id_group] = new Group($id_group); if (!$groups[$id_group]->isAssociatedToShop(Context::getContext()->shop->id)) { $id_group = (int)Configuration::get('PS_CUSTOMER_GROUP'); if (!isset($groups[$id_group])) $groups[$id_group] = new Group($id_group); } return $groups[$id_group]; } Edited January 3, 2017 by Arlulo (see edit history) Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted January 11, 2017 Share Posted January 11, 2017 Un petit coucou bien tardif pour te dire un grand grand merci pour ton aide et ta disponibilité Arlulo !!!! Link to comment Share on other sites More sharing options...
Arlulo Posted January 12, 2017 Author Share Posted January 12, 2017 Bonjour Peggy, ceci a résolu ton problème? Bonne journée! Link to comment Share on other sites More sharing options...
PEGGY1233456 Posted January 12, 2017 Share Posted January 12, 2017 coucou Arlulo, Oui impec!! Je te dois une fière chandelle!!! Merci encore! Je te souhaite une excellente journée! Peggy Link to comment Share on other sites More sharing options...
Arlulo Posted January 12, 2017 Author Share Posted January 12, 2017 Heureux de l'apprendre, excellente soirée! Link to comment Share on other sites More sharing options...
Cinerar Posted March 21, 2017 Share Posted March 21, 2017 Thank you very much for your ideas, just some additions if "Guest checkout" is enabled you also need to modify add function in customer.php if ($this->id_default_group == Configuration::get('PS_CUSTOMER_GROUP')) { if ($this->is_guest) { if ($_SESSION["urlpart"] == "urlpart") { $this->id_default_group = 5; } else { $this->id_default_group = (int)Configuration::get('PS_GUEST_GROUP'); } } else { $this->id_default_group = (int)Configuration::get('PS_CUSTOMER_GROUP'); } } 1 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