Jump to content

[résolu]Comment afficher ou masquer un bloc selon le groupe de clients ?


Recommended Posts

Bonjour !

J'aimerais savoir si comme dans le cms xoops (oui, j'en parle beaucoup car j'en arrive depuis peu ...) il y a moyen d'affecter aux blocs des permissions de lecture selon les groupes de clients ?

Autre formulation, est-il possible d'allouer aux groupes de clients des permissions différentes pour voir/masquer les blocs en fonction du groupe (un peu comme employés/permissions) ?

Je n'ai rien trouvé sur les forums ...

Link to comment
Share on other sites

  • 2 weeks later...

Et bien, d'apres mes connaissances en BO Presta, je n'ai vu nul part le moyen de spécifier si un block est visible ou pas à un client.
Après, et tant donnée la notion de group client, c'est effectivement possible par programmation de dire si un module s'affiche ou pas en fonction de l'appertenance.
Sa resterait de la 'bidouille' et pas une réelle gestion de droit, Prestashop n'étant pas encore prévu pour.

Cdlt,
Pierre.

Link to comment
Share on other sites

Tu peu t'inspirer de çà si sa te va (je le repete, c'est une bidouille :))

Par exemple dans le module blocklanguages.php (affichage des ptits drapeaux qui vont bien), tu ne veut que ce module ne soit affiché que pour les clients du groupe id 2 :

A ajouter dans function hookTop($params)

global $cookie;
$tmpCust = new Customer(intval($cookie->id_customer));
if(!$tmpCust->isMemberOfGroup(2)) return false;



Au final çà donne :

   function hookTop($params)
   {
       global $smarty;

       // n'afficher que si le client appartient au group_id 2
       global $cookie;
       $tmpCust = new Customer(intval($cookie->id_customer));
       if(!$tmpCust->isMemberOfGroup(2)) return false;


       $languages = Language::getLanguages();
       if (!sizeof($languages))
           return '';
       $smarty->assign('languages', $languages);
       return $this->display(__FILE__, 'blocklanguages.tpl');
   }




Voili voilou.
Cdlt,
Pierre.

Link to comment
Share on other sites

Extra ! Merci !

J'en étais arrivé la même conclusion, modification du hook concerné (pas mal pour un débutant !).

Je me compliquais un peu plus la vie puisque je voulais afficher le .tpl

( return $this->display( __FILE__, 'blocklanguages.tpl' ); ) en fonction de ce test d'appartenance. Le test en début est mieux !

Je me creusais les méninges pour débusquer ce groupe d'appartenance, mais maintenant tout fonctionne !!!

Encore merci !

Link to comment
Share on other sites

  • 1 month later...

Il y aurai pas moyen de faire une classe et de gérer ça avec smarty plutôt ? (comme {if logged}... {/if}

Genre {if usergroupelogged="2"} ... {/if}

Comme ça on peut l'applique a ce que l'on veux comme élément.
Je suggère la théorie, après je suis pas assez dév pour le concrétiser....

Link to comment
Share on other sites

  • 2 months later...

Un grand merci à lionhell et yoya911, grâce ce ce bout de code, il est possible de n'afficher certains blocs qu'aux utilisateur enregistrés

Pour que seuls les utilisateurs enregistrés puissent voir tel ou tel bloc, il suffit de rajouter ce code
dans le fichier .tpl du bloc en question

 // n'afficher que si le client appartient au group_id 1
       global $cookie;
       $tmpCust = new Customer(intval($cookie->id_customer));
       if(!$tmpCust->isMemberOfGroup(1)) return false;



En effet, le groupe "1" est le groupe "default"

;-)

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

J'ai la question exactement inverse à poser.
Je m'explique :
Je souhaiterais afficher le module vente flash à tous le monde, mais qu'il faille s'inscrire pour afficher le produit.

J'ai créé une catégorie "vente_privée" soumise à acceptation par votre humble serviteur et je n'active mes ventes flash que depuis cette catégorie. Aussi lorsque l'utilisateur est logger et admis au groupe, pas de pb le module s'affiche bien. Mais, il s'affiche vide pour l'utilisateur non enregistré ou non validé pour le groupe...

Qu'elle code ajoutée pour dire "affiche le module pour tous", mais bien entendu sans perdre la restriction d'accès à la catégorie "vente_privée" s'il clic pour en voir plus...

Link to comment
Share on other sites

J'ai pas bien compris ta demande
1) tu veux afficher le module* vente flash pour tout le monde (donc utilisateurs logués ou non)
2) tu ne veux pas y afficher les produits si le client n'est pas du bon groupe

Donc tu affiches quoi au final, si tu ne vois même pas de produit ? Un bloc vide ?

Si c'est juste un teasing pour inciter le gens à faire partie des privilégiés, une animation avec un lien vers le module vente fash te suffit.
Module qui lui est bloqué si l'utilisateur n'est pas du bon groupe.


* Celui dispo sur prestastore ?

Link to comment
Share on other sites

Bonjour,

Je m'explique, le module Flash et celui d'erihnar, VenteFlash2.2f et il ne permet pas de réservé l'affichage.

Je veux que tous les clients (ou visiteurs) voient les ventes en cours et à venir (donc loggé ou non).

Par contre, je place les produits dans une catégorie "privée" donc pour accèder à la vente, obligation de s'inscrire et d'avoir été accepté par mes soins.

En résumé, dans la colonne de droite, je voudrais afficher mon module pour tous (actuellement, il s'affiche vide pour les non loggés et les non validés), je souhaite autorisé l'affichage pour tous, donc que le module soit autorisé à récupérer les infos des produits dans la catégorie "privée" pour tous les utilisateurs du site. Idem pour la page CommingSoon.

Espérant avoir été clair ?

Link to comment
Share on other sites

Bonsoir,

Je reprécise ma question : Peux-t-on fixer une condition dans une fonction qui transforme toute visite (loggée ou non) en "c'est un utilisateur loggé du groupe 2" pour ce seul module afin que le module venteFlash puisse récupérer les info produits de la catégorie Vente_privée (réservée aux utilisateurs loggé et appartenant au groupe 2) et qu'il les affiche dans le bloc ? (Sans bien entendu loggé tout le monde car si il clique sur l'image du produit, ils ne doivent pas arriver à la page de vente du produit mais à la page erreur Catégorie restreinte, nécessite d'être enregistré....) ???

Link to comment
Share on other sites

A mon avis, dans ce cas il faut que tu modifies le template lui-même

1) insère un {debug} et vérifies si tu as une variable définissant le group. Normalement non

2) il va donc falloir que tu charges une variable que tu nommera CustomerGroup
a) dans calsses/Customer.php
tu ajoutes

 /**  @var interger customer_group
public    $customer_group; 


B) dans le fichier init.php. tout à la fin, sous 'customerName =>... tu ajoutes

'customerGroup' => ($cookie->logged ? $cookie->customer_group : false),



[EDIT] 2bis) dans authentification.php, tu ajoutes :

$cookie->id_customer = intval($customer->id);
// Ajout
$cookie->customer_group = $customer->group;


** Attention, dans mon cas j'ai ajouté un champ dans la table ps_customer pour définir le "group" pour une utilisation "standard" des groupe, rempcer par le code adéquat (que je ne connais pas...)**

3) vérifie avec le{debug} si cette fois tu as la variable CustomerGroup

4) si c'est OK il ne te reste qu'à modifier le template avec un

{if $customerGroup == 3} // 3 est le nom du groupe pour tes ventes privées

// tu affiches ça ce que les gens "vente privé" peuvent voir

{else}

// tu affiches ce que les autres voient

{/if}

Link to comment
Share on other sites

  • 1 month later...

Le but n'est pas une boutique privée, je voudrai seulement faire apparaître une image ou un lien pour mon groupe de client pro

voici les lignes 170 à 198 :

'protocol' => $protocol,
       'img_ps_dir' => _PS_IMG_,
       'img_cat_dir' => _THEME_CAT_DIR_,
       'img_lang_dir' => _THEME_LANG_DIR_,
       'img_prod_dir' => _THEME_PROD_DIR_,
       'img_manu_dir' => _THEME_MANU_DIR_,
       'img_sup_dir' => _THEME_SUP_DIR_,
       'img_ship_dir' => _THEME_SHIP_DIR_,
       'img_col_dir' => _THEME_COL_DIR_,
       'img_dir' => _THEME_IMG_DIR_,
       'css_dir' => _THEME_CSS_DIR_,
       'js_dir' => _THEME_JS_DIR_,
       'tpl_dir' => _PS_THEME_DIR_,
       'modules_dir' => _MODULE_DIR_,
       'mail_dir' => _MAIL_DIR_,
       'pic_dir' => _THEME_PROD_PIC_DIR_,
       'lang_iso' => $ps_language->iso_code,
       'come_from' => 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['REQUEST_URI']),
       'shop_name' => Configuration::get('PS_SHOP_NAME'),
       'cart_qties' => intval($cart->nbProducts()),
       'cart' => $cart,
       'currencies' => Currency::getCurrencies(),
       'id_currency_cookie' => intval($currency->id),
       'currency' => $currency,
       'languages' => Language::getLanguages(),
       'logged' => $cookie->isLogged(),
       'page_name' => $page_name,
       'customerName' => ($cookie->logged ? $cookie->customer_firstname.' '.$cookie->customer_lastname : false)));
       'customerGroup' => ($cookie->logged ? $cookie->customer_group : false), 

Link to comment
Share on other sites

Une instruction php doit finir par un ";"

inverse les 2 dernière lignes et ce sera OK

       'page_name' => $page_name,
       'customerGroup' => ($cookie->logged ? $cookie->customer_group : false),
       'customerName' => ($cookie->logged ? $cookie->customer_firstname.' '.$cookie->customer_lastname : false)));

Link to comment
Share on other sites

bonjour,

Donc j'ai effectivement un problème avec mes 2 groupes de clients ...
Le 1er groupe est le groupe "default" avec id= 1
le 2nd groupe est le groupe "B2B" avec id= 2

j'ai placé la condition dans le fichier "my-account.tpl" de mon thême comme ceci :

{if $CustomerGroup == 1} 

Clients defauts

{else}

Clients B2B

{/if}



D'après ce que je constate, il m'affiche tout le temps Clients B2B. Que ce soit un client défaut ou B2B ...

Link to comment
Share on other sites

Tiens bizzare, j'aurai oublié de valider ma dernière réponse ?

Je voulais que tu vérifies dans le debug smatry si tu avais bien la variable {$customerGroup}

Pour la question des majuscules, oui c'est important :
$CustomerGroup n'est pas $customerGroup


Si tu as bien la variable {$customerGroup}, il de suffit de retirer la majuscule

{if $customerGroup == 1} 

Link to comment
Share on other sites

Merci, mais je ne comprend pas très bien le "ajouter un champ dans la table ps_customer pour définir le “group”" ?

dans mon cas j'ai placé le code à la fin du fichier "authentification.php" comme ceci :

...
$smarty->assign('errors', $errors);
Tools::safePostVars();
$smarty->display(_PS_THEME_DIR_.'authentication.tpl');

$cookie->id_customer = intval($customer->id);
// Ajout
$cookie->customer_group = $customer->group;

include(dirname(__FILE__).'/footer.php');



et dans ma table ps_customer_group j'ai deux champs : id_customer et id_group, dois-je en créer un nouveau ?

Merci pour ton aide ;)

Link to comment
Share on other sites

c'est parce que mon champ ne s'appelle pas en fait "group"

C'est une caractéristique du client comme peut l'être le sexe (homme, femme ou indéfini)
J'ai ajouté plusieurs caractéristiques dans ma table ps_customer qui me permettent de "personnaliser" facilement des affichages dans les templates.

Ainsi, mes clients "pro" ne voient que des prix HT et les particuliers que des prix TTC.

Ces caractéristiques sont ajoutées à la main* dans la base de donnée sans passer par le back-office

*en fait c'est automatique depuis mon CRM maison avec la passerelle que je développe actuellement

Link to comment
Share on other sites

  • 8 months later...
...il est possible de n'afficher certains blocs qu'aux utilisateur enregistrés
Pour que seuls les utilisateurs enregistrés puissent voir tel ou tel bloc, il suffit de rajouter ce code
dans le fichier .tpl du bloc en question

 // n'afficher que si le client appartient au group_id 1
       global $cookie;
       $tmpCust = new Customer(intval($cookie->id_customer));
       if(!$tmpCust->isMemberOfGroup(1)) return false;



En effet, le groupe "1" est le groupe "default"

;-)




J'ai dupliqué mon bloc logo de paiement.. pour y mettre frais de port gratuit pour à partir de.. pour les particuliers et j'ai fais la meme chose pour les pros.. mais je ne parviens pas avec ce que tu dis ci-dessus à bloquer l'affichage de ce block soit aux pros ou aux particuliers.. y a t'il une subtilité ?
Je te remercie par avance
Ben
Link to comment
Share on other sites

  • 3 weeks later...

sltt tout le monde,

Jordyyy tu pe me dire comment ta fais pour adapter la ligne de authentication.php s'il te plait?!!

// Ajout
$cookie->customer_group = $customer->group;

psk comme toi moi j'ai dans ma table ps_customer_group deux champs : id_customer et id_group donc logiquement je pense qu'au lieu de mettre
$customer->group; je devrais mettre autre chose et j'aimerais savoir c'est quoi...

J'ai vu que tu avais réussi tu peut publier la solution s'il te plaittt, C'est urgenttt! Merci d'avanceee :)

Link to comment
Share on other sites

  • 1 year later...
  • 2 months later...
  • 2 weeks later...

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