Accueil » Conseils & tutoriels sites internet » Tutos Prestashop » Prestashop : limitez l’accès aux pages CMS

Prestashop : limitez l’accès aux pages CMS

Posté dans : Tutos Prestashop 0

Rendre une page accessible uniquement aux personnes inscrites donne à vos clients un sentiment d’être privilégiés, et incite les visiteurs à s’inscrire sur votre boutique. Sans pour autant rendre ceci obligatoire sur toutes vos pages, il est possible (et loin d’être difficile) sur Prestashop de limiter l’affichage de vos pages CMS en insérant dans votre thème une condition. Ceci vous permet par exemple de proposer des informations à certains groupes de clients, ou à tous ceux qui sont inscrits. C’est ce dernier cas que nous allons traiter ici. Cette situation se retrouve bien souvent sur des boutiques Prestashop de vente privée, afin de masquer des informations que les internautes ne devraient pas voir sans disposer d’un compte client.

Chaque élément dans Prestashop possède son identifiant propre, qui est un numéro enregistré dans votre base de données et qui s’incrémente au fur et à mesure des ajouts que vous effectuez dans votre boutique. Si vous avez 7 pages CMS, la prochaine aura l’identifiant numéro 8, et ainsi de suite.

Sur Prestashop les pages CMS possèdent un ID, très utile pour les repérer rapidement dans le code, qu’il s’agisse du code d’un module ou directement du code de votre thème. Les modules traitent ces numéros très importants avec du code PHP, mais nous allons nous en passer pour intégrer plus simplement, directement dans le thème.

Il faut savoir qu’entre Prestashop 1.6 et 1.7, les thèmes ont énormément changés. La modification sur ce tutoriel sera séparée en deux parties :

Modifier les CMS pour les rendre privées sur Prestashop avec Cyssoo
Cyssoo

Il va de soi que vous êtes responsable de la stabilité de votre site, veillez également à activer le mode debug pour afficher les erreur en cas de page blanche.

Limitation des CMS aux clients pour Prestashop 1.6

Ce sera la modification la plus rapide, mais probablement la moins stable, car à la prochaine mise à jour de votre thème, cette correction sera écrasé. Je ne saurais trop recommander de noter cette correction de manière à pouvoir la remettre en place ultérieurement, certains webdesigners sauvegardent directement sur le serveur les fichiers en y ajoutant le suffixe _bak (pour backup).

Sous Prestashop 1.6, le fichier qui sera modifié s’appelle cms.tpl.

cms

Repérer un ID de page CMS dans Prestashop se résume à une ligne de code similaire à celle-ci :

{if $cms->id == 9}

$cms est donc la variable de toutes les pages CMS de votre Prestashop, $cms->id détermine l’identifiant que vous pouvez trouver en back-office, ce pour chaque page CMS que vous avez créé. (Pour rappel, les CMS se trouvent dans l’onglet « Préférences / CMS » sur Prestashop 1.6)

PrefCMS

Il est donc évident que la structure conditionnelle pour détecter un CMS particulier se résume à cette bonne vieille syntaxe smarty :

{if $cms->id == 9}

{* Votre code *}

{/if}

Vous noterez qu’avec Smarty, une condition {if} se referme avec {/if}. De plus – toujours sur Prestashop 1.6 – il est possible de détecter les internautes connectés avec la variable smarty Prestashop $logged, qui détermine si oui ou non l’internaute est connecté.

Et par conséquent vous pouvez ajouter toutes les conditions souhaitées à ceci :

{if $cms->id == 9}
 {if $logged}
 <div class="rte{if $content_only} content_only{/if}">
 {$cms->content}
 </div>
 {else}
 <div class="rte{if $content_only} content_only{/if}">
 <p>Vous devez être connecté pour afficher cette page.</p>
 <a href="{$link->getPageLink('authentication', true)|escape:'html'}" rel="nofollow" title="{l s='Authentication'}">Se connecter ou créer un compte</a>
 </div>
 {/if}
{else}
 <div class="rte{if $content_only} content_only{/if}">
 {$cms->content}
 </div>
{/if}

En premier lieu on détecte si la page CMS a pour ID le numéro 3.

Puis nous détectons si la personne est connectée à la boutique, auquel cas on affiche le contenu de la CMS avec {$cms->content}.

Si l’utilisateur n’est pas connecté, alors nous affichons un lien vers la page d’inscription/connexion.

connect

Ce système peut se révéler très utile lors de ventes flash pour personnes d’un groupe particulier, ou pour attirer de nouveaux clients en les poussant à s’inscrire sur votre boutique afin d’avoir accès à une page précise (les ventes flashs sont un bon départ, il existe une multitude de pages que vous pouvez bloquer de cette manière, à vous d’avoir suffisamment d’imagination !)

Vérifiez bien l’ID de votre CMS et pensez à vider votre cache si ce n’est fait, très souvent le cache de Prestashop est mal paramétré.

Limitation des CMS aux clients pour Prestashop 1.7

Sous Prestashop 1.7, outre le fait que la structure des thèmes a radicalement changé, nous disposons d’un peu plus de possibilités pour gagner en stabilité avec d’éventuelles mises à jour de thème.

Tout d’abord, il est possible de créer un thème enfant sous Prestashop 1.7. Cela permet de modifier le comportement d’un thème tout en conservant les mises à jour, fonctionnalité déjà bien connue des utilisateurs de WordPress. Donc avant de modifier votre thème, n’hésitez pas à utiliser notre module gratuit de création de thème enfant pour Prestashop.

Je partirais ici sur une base de thème Classic Child, thème enfant de celui natif de Prestashop 1.7 nommé Classic.

Le contenu des CMS désormais est situé dans le fichier /themes/classic/templates/cms/page.tpl. Il faut donc copier ce fichier en respectant très précisément l’arborescence dans /themes/classic-child/templates/cms/page.tpl , où classic-child est le dossier de votre thème enfant.

La syntaxe également a changée dans ce template, et les variables smarty pour Prestashop 1.7 ne sont plus les mêmes. Là où nous avions un objet utilisant ->, nous avons désormais un tableau smarty.

Une page CMS pour les clients connectés

Le principe en demeure toutefois le même. Nous allons donc nous servir de $cms.id et de $customer.is_logged. Repérez les lignes suivantes :

    {block name='cms_content'}
      {$cms.content nofilter}
    {/block}

Remplacez-les par celles-ci :

    {block name='cms_content'}
      {if $cms.id == 9}
      {if $customer.is_logged}
      {$cms.content nofilter}
      {else}
      <a href="{$link->getPageLink('authentication', true)}" rel="nofollow">Vous devez être connecté pour afficher cette page</a>
      {/if}
      {else}
      {$cms.content nofilter}
      {/if}
    {/block}

Comme vous le constatez, les conditions sont toujours similaires, mais la syntaxe a évolué. Nous retrouvons toutefois la possibilité de récupérer l’URL d’une page à l’aide de $link->getPageLink().

Une page CMS pour un groupe client précis

Imaginons que cette fois-ci nous désirons plutôt limiter l’accès à un groupe client. La variable à utiliser demeure toujours $customer, mais il va falloir détailler un peu plus. Pour accéder au groupe client par défaut de l’internaute, il faut saisir la variable $customer.id_default_group. Cette variable donnera la valeur 1 si l’utilisateur n’est pas connecté, 2 s’il s’agit d’un utilisateur « invité » et 3 s’il s’agit d’un client (possédant un compte et étant bien connecté.

En imaginant que j’ai créé un groupe client « Producteurs » possédant l’identifiant 4, je peux donc verrouiller ma page CMS sous Prestashop grâce à ce code :

    {block name='cms_content'}
    {if $cms.id == 7}
    {if $customer.id_default_group == 4}
      {$cms.content nofilter}
    {else}
    <a href="{$link->getPageLink('authentication', true)}" rel="nofollow">Vous devez être producteur pour afficher cette page</a>
    {/if}
    {else}
      {$cms.content nofilter}
    {/if}

A présent, ma page possédant l’identifiant numéro 7 ne sera visible que par les clients du groupe client numéro 4. Les autres seront invités à se connecter avec un message précisant qu’ils doivent bien être producteurs pour visualiser la page.

Et sur Prestashop 1.7, avec un thème enfant, vous conservez toutes les mises à jour du thème parent, tout en verrouillant l’accès à des CMS selon les clients !

Imprimer Imprimer

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.