Articles en accès restreint dans SPIP sans plugins
Article mis en ligne le 13 octobre 2022
dernière modification le 26 août 2024

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.

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

<div id="adherer_panel">
	[(#SESSION{statut}|!={''}|?{
 		<div class="adherer_alert no-print">&hellip; Partie réservée aux adhérents &hellip;</div>
 	})]
 	[(#SESSION{statut}|=={''}|?{
 		<div class="adherer_alert no-print">&hellip; La suite de cet article est réservée aux adhérents &hellip;</div>
 		<div id="adherer_link">
 			<ul class="menu">
 				<li><a href="http://clionautes.org/spip.php?article493">Adhérer</a></li>
				<li><a href="spip.php?page=login&url=[(#SELF|urlencode)]">Se connecter</a></li>
			</ul>
 		</div>
	})]
</div>

Lorsque SPIP tombe sur la balise, il la remplace par le contenu du fichier contenu_adherent.html. À savoir une

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

function contenu_adherent( $texte ) {
	return preg_replace( "/(<div id=\"adherer_link\">.+?<\/div>.+?<\/div>)(.+)/s", "$1", $texte );
}

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 :

<B_documents>
		<div id="documents">
			<p id="documents_titre">Documents</p>
			<BOUCLE_documents(DOCUMENTS){id_article}{par titre}{mode=document}{doublons}>
				<ul class="doc_lies">
					[<li>(#LOGO_DOCUMENT|#URL_DOCUMENT)</li>]
					[<li><a href="#URL_DOCUMENT">(#TITRE||couper{30}|ucfirst)</a></li>]
					<li>[(#TYPE_DOCUMENT)] [(#TAILLE|taille_en_octets)]</li>
				</ul>
			</BOUCLE_documents>
		</div>
	</B_documents>

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

<BOUCLE_article_documents(ARTICLES){id_article}>
 
	<B_documents>
		<div id="documents">
			<p id="documents_titre">Documents</p>
			<BOUCLE_documents(DOCUMENTS){id_article}{par titre}{mode=document}{doublons}>
				<ul class="doc_lies">
					[<li>(#LOGO_DOCUMENT|#URL_DOCUMENT)</li>]
					[<li><a href="#URL_DOCUMENT">(#TITRE||couper{30}|ucfirst)</a></li>]
					<li>[(#TYPE_DOCUMENT)] [(#TAILLE|taille_en_octets)]</li>
				</ul>
			</BOUCLE_documents>
		</div>
	</B_documents>
 
</BOUCLE_article_documents>

Il reste à écrire l’inclusion dans article.html à l’intérieur d’un test qui vérifie si le visiteur est connecté.
[(#SESSION{statut}|?{' ',''})<INCLURE{fond=inc/inc_documents, id_article}>]

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.


« L’écoute et la compréhension de la problématique de l’autre est un premier pas vers la solidarité. »
Plan du site Contact Mentions légales

2017-2026 © SpipFactory - Tous droits réservés
Haut de page
Réalisé sous SPIP
Habillage ESCAL 5.5.11
Hébergeur : SpipFactory