Bonsoir,
J'avais un petit besoin de masquer des contenus (rubriques et articles) sans pouvoir les mettre dans un secteur particulier afin d'utiliser le plugin de Maïeul, donc j'en ai profité pour découvrir le pipeline pre_boucle et voilà le résultat...
Il suffit d'ajouter un mot clef dont le titre est "masquer" à des rubriques et articles pour qu'ils soient masqués sur le site public.
Début du message réexpédié :
De : nicolas@hoizey.com
Date : 16 octobre 2009 18:00:46 HAEC
À : spip-zone-commit@rezo.net
Objet : [Spip-zone-commit] r32162 - in /_plugins_/masquer: masquer_pipelines.php plugin.xml
Répondre à : spip-zone@rezo.netAuthor: nicolas@hoizey.com
Date: Fri Oct 16 18:00:44 2009
New Revision: 32162Log:
version 0.1Added:
_plugins_/masquer/masquer_pipelines.php
_plugins_/masquer/plugin.xmlAdded: _plugins_/masquer/masquer_pipelines.php
--- _plugins_/masquer/masquer_pipelines.php (added)
+++ _plugins_/masquer/masquer_pipelines.php Fri Oct 16 18:00:44 2009
@@ -0,0 +1,68 @@
+<?php
+function masquer_pre_boucle($boucle) {
+ static $id_mot;
+ static $liste_rubriques;
+ static $liste_articles;
+
+ // On ne masque que sur l'espace public
+ if (test_espace_prive()) {
+ return $boucle;
+ }
+
+ // Récupération de l'id_mot du mot dont le titre est "masquer"
+ if (!isset($id_mot)) {
+ $id_mot = sql_getfetsel("id_mot", "spip_mots", "titre='masquer'");
+ }
+
+ // Récupération de la liste des rubriques masquées et leurs branches
+ // Hors du cas de la boucle RUBRIQUE, car utilisé aussi par le cas de la boucle ARTICLES
+ if (!isset($liste_rubriques)) {
+ $liste_rubriques = array();
+ // On masque les rubriques qui ont le mot clef
+ $res = sql_select("id_rubrique", "spip_mots_rubriques", "id_mot=".$id_mot);
+ while($row = sql_fetch($res)) {
+ $liste_rubriques = array_merge($liste_rubriques, liste_rubriques_branche($row['id_rubrique']));
+ }
+ }
+
+ // Cas de la boucle RUBRIQUES
+ if ($boucle->type_requete == 'rubriques') {
+ $rub = $boucle->id_table . '.id_rubrique';
+ $boucle->where = "array('NOT IN', '$rub', '(".implode(',', $liste_rubriques).")')";
+ }
+
+ // Cas de la boucle ARTICLES
+ if ($boucle->type_requete == 'articles') {
+ // On ne récupère la liste des articles masqués que si on a une boucle ARTICLES
+ if (!isset($liste_articles)) {
+ $liste_articles = array();
+ // On masque les articles qui ont le mot clef
+ $res = sql_select("id_article", "spip_mots_articles", "id_mot=".$id_mot);
+ while($row = sql_fetch($res)) {
+ $liste_articles = $row['id_article'];
+ }
+ // On masque les articles qui sont dans des rubriques masquées
+ $res = sql_select("id_article", "spip_articles", "id_rubrique IN (".implode(',', $liste_rubriques).")");
+ while($row = sql_fetch($res)) {
+ $liste_articles = $row['id_article'];
+ }
+ }
+ $art = $boucle->id_table . '.id_article';
+ $boucle->where = "array('NOT IN', '$art', '(".implode(',', $liste_articles).")')";
+ }
+
+ return $boucle;
+}
+
+// Récupération de la liste des rubriques d'une branche
+function liste_rubriques_branche($id_rubrique) {
+ $liste = array($id_rubrique);
+ $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=".$id_rubrique);
+ while($row = sql_fetch($res)) {
+ $liste = $row['id_rubrique'];
+ $sous_rubriques = liste_rubriques_branche($row['id_rubrique']);
+ $liste = array_merge($liste, $sous_rubriques);
+ }
+ return $liste;
+}
+?>
\ No newline at end of fileAdded: _plugins_/masquer/plugin.xml
--- _plugins_/masquer/plugin.xml (added)
+++ _plugins_/masquer/plugin.xml Fri Oct 16 18:00:44 2009
@@ -0,0 +1,21 @@
+<plugin>
+ <nom>Masquer</nom>
+ <auteur>Nicolas Hoizey de [Clever Age->http://www.clever-age.com/\]</auteur>
+ <licence>GNU/GPL</licence>
+ <version>0.1</version>
+ <description>
+ Ce plugin permet de masquer sur le site public les contenus qui ont un mot clef dont le titre est « masquer ». Si une rubrique est masquée, toute sa branche l'est aussi.
+
+ Seuls les rubriques et articles sont gérés dans un premier temps.
+
+ Todo :
+ - permettre de forcer l'affichage avec le critère <code>{tout}</code>
+ - gérer les brèves, sites, auteurs, etc.
+ </description>
+ <etat>test</etat>
+ <prefix>masquer</prefix>
+ <pipeline>
+ <nom>pre_boucle</nom>
+ <inclure>masquer_pipelines.php</inclure>
+ </pipeline>
+</plugin>_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit
-Nicolas
--
Nicolas HOIZEY
Blog : http://www.gasteroprod.com/
Photos : http://flic.kr/nicolas-hoizey/