Articles en accès restreint dans SPIP

Notez que cet article a été écrit il y a plus de 4 ans, mais il n'est pas forcément obsolète.

De nombreux sites, en particulier de presse écrite, proposent aux lecteurs anonymes seulement une partie de certains articles. On peut lire le début de ceux-ci, et pour continuer la lecture, un bandeau est affiché, proposant de se connecter ou de s’abonner.

Sur le Midi-Libre, on trouve ce type de bandeau :

Artcile réservé aux abonnés
Article réservé aux abonnés – Midi Libre

Le journal Ouest-France réserve le même genre de bandeau :

Ouest-France en accès restreint
Ouest-France en accès restreint

Le plugin Accès Restreint permet de définir et de gérer des zones en accès restreint, accessibles seulement aux visiteurs authentifiés et autorisés.

Afin de faire cela, sans plugin, dans SPIP, on va créer un modèle définissant une balise. Cette balise reconnue coupera l’article à l’endroit où elle est insérée et effacera le reste de l’article. Pour d’autres parties de l’article où l’on place par exemple les documents utilisés, on effectuera un test conditionnel à la mode SPIP, qui vérifiera si la balise est présente, et cachera aussi cette partie.

Pour définir cette balise qu’on appelle <contenu_adherent|> (avec un pipe à la fin ou un N°), on crée un fichier dans le répertoire modeles du squelette. Si ce répertoire n’existe pas, il faut le créer. Le fichier qui sera appelé lorsque SPIP rencontrera cette balise dans un article est contenu_adherent.html.

contenu_adherent.html

Lorsque SPIP tombe sur la balise, il la remplace par le contenu du fichier contenu_adherent.html. À savoir une <div> avec un test. Si l’utilisateur est connecté sera écrit : « … Partie réservée aux adhérents … ». Si l’utilisateur n’est pas connecté sera écrit : « … La suite de cet article est réservée aux adhérents … » avec deux liens pour s’abonner ou se connecter. En cliquant sur Se connecter , l’utilisateur se retrouve sur la page de login (login.html) qui renverra en cas de succès (ou d’échec) sur la page en cours.

Le squelette qui affiche les articles (article.html) contient la balise [(#TEXTE)]. On la filtre alors avec |contenu_adherent : [(#TEXTE|contenu_adherent)]. On peut bien-sûr chainer les filtres, par exemple [(#TEXTE|contenu_adherent|lignes_longues|justifier)].

On ajoute donc dans le fichier mes_options.php, la fonction contenu_adherent() qui filtre le contenu du texte avec une expression régulière.

La fonction est ridiculement petite, mais incroyablement efficace. Elle repère la présence de la <div id="adherer_link">, ajoutée par la présence de la balise <contenu_adherent|> dans l’article et traitée par le modèle contenu_adherent.html.

Les documents de l’article (images et autres fichiers) peuvent être affichés par une boucle ressemblant à ceci :

Cette boucle peut être présente dans le squelette article.html. Afin d’effectuer un test conditionnel à la mode SPIP dans l’article, il faut mettre cette boucle dans un fichier séparé que l’on inclut avec la balise INCLURE. SPIP, en effet, ne supporte pas de mettre une boucle à l’intérieur d’un bloc de test.

On copie donc dans un fichier séparé (inc_documents.html par exemple) cette boucle DOCUMENTS que l’on met à l’intérieur d’une boucle ARTICLES, destinée seulement à récupérer l’identifiant id_article de l’article appelant.

On obtient donc le fichier à inclure :

inc_documents.html

Il reste à écrire l’inclusion dans article.html à l’intérieur d’un test qui vérifie si le visiteur est connecté.

Le test  [(#SESSION{statut}|?{' ',''}) ... ]  vérifie le statut du visiteur.

SPIP supporte 3 statuts :

  • Le visiteur, qui est une personne pouvant simplement accéder aux parties restreintes du site public ainsi qu’aux forums auquel il est abonné. Il n’a pas accès à la partie privée (/ecrire).
  • Le rédacteur, qui  a accès à l’espace privé et qui ne peut que rédiger des textes et proposer des contenus (textes et documents multimedia) à l’évaluation. C’est le statut le plus couramment utilisé.
  • L’administrateur, qui a accès à l’espace privé et qui a « tous les droits » sur le site : ajout, modification et suppression des contenus, relecture et correction des textes rédigés par les autres rédacteurs, modification de la structure, création de rubriques, et publication et validation sur le site public.
    On peut définir des administrateurs restreints n’ayant accès qu’à certaines rubriques.

Et hop, un système simple, qui permet de restreindre la lecture des certains articles, encourageant des lecteurs à faire une demande d’adhésion.

3 Commentaires

  1. bonjour

    j’ai essayé de refaire ce que vous proposez sur la page suivante : https://murviel-info-beziers.com/articles-acces-restreint-spip/

    mais rien ne se produit.
    Voici ce que j’ai fait :

    créer le fichier contenu_adherent.html et mis dans /modeles/
    ajouter la ligne: function contenu_adherent( $texte ) {return preg_replace( « /(<div id=\ »adherer_link\ »>.+?<\/div>.+?<\/div>)(.+)/s », « $1 », $texte );}  dans mon fichier /config/mes_options.php ;
    Filtrer les champs « privés » dans le squelette article.php sur chapo [(#CHAPO|image_reduire{1200,*}|contenu_adherent|)], texte et deux modèles (article_cycle et splickrbox). SI je me doute que ce n’est pas si simple pour ces deux modèles, je devrais malgré tout avoir le chapo et le texte de filtrer mais si je ne suis pas connecté, tout apparaît…
    Aurais-je raté une étape? Probablement mais je ne vois pas trop où.
    Merci de votre aide et bonne journée
    Christophe Noisette, l’aire de rien
    httsp://lairederien.net

  2. Bon je viens de comprendre qu’il fallait ajouter la balise dans le champs en question dans la partie /ecrire… en gros pour chaque article… sinon il faut utiliser [(MODELE…)]…

    ma question est comment fait-on pour utiliser cette technique avec justement des modeles tels que ceux que j’utilise pour mes galeries de photos…

    Merci encore

    Christophe

  3. Et bien j’ai trouvé;.. il suffit de mettre mon modele dans le corps du chapo…

    bon je cherche désormais à optimiser cela pour tous les articles d’une même rubrique… si vous avez une piste… Des idées
    Cordialement

    Christophe

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