Ce script contient deux filtres :
- Un filtre pour afficher le sommaire
- Un filtre pour découper l’article
Pour installer ces filtres, il faut ajouter ces deux fonctions dans le fichier mes_fonctions.php3
.
Afficher le sommaire
/*
* +----------------------------------+
* Nom du Filtre : Sommaire de l'article
* +----------------------------------+
* Date : Vendredi 6 juin 2003
* Auteur : Noplay (noplay@altern.org)
* Aurélien PIERARD : aurelien.pierard@sig.premier-ministre.gouv.fr
* +-------------------------------------+
* Fonctions de ce filtre :
* Cette modification permet d'afficher le sommaire de l'article
* généré dynamiquement à partir du texte de l'article. Vous pouvez naviguer
* dans l'article en cliquant sur les titres du sommaires.
*
* Tous ce qui ce trouve entre {{{ et }}} est considéré comme un titre à ajouter au sommaire de l'article.
* +-------------------------------------+
*
* Pour toute suggestion, remarque, proposition d'ajout
* reportez-vous au forum de l'article :
* http://www.uzine.net/spip_contrib/article.php3?id_article=76
*/
//SOMMAIRE
function sommaire_article($texte)
{
$artsuite = 0;
$page = split('-----', $texte);
$uri_art = generer_url_article($GLOBALS['id_article']);
$uri_art .= strpos($uri_art, '?') ? '&' : '?';
$i=0;
$texte="";
while($page[$i]){
// On ajoute une ancre aux intertitres "{{{ }}}" que l'on utilise pour créer le sommaire
preg_match_all("|\{\{\{(.*)\}\}\}|U",$page[$i], $regs);
$nb=1;
for($j=0;$j<count($regs[1]);$j++){
$p=$i+1;
$texte=$texte."<a href=\"". $uri_art . "artsuite=" .$i. "#sommaire_".$nb."\" title=\"".$regs[1][$j]."\">".$regs[1][$j]."</a>, p$p<br />";
$nb++;
}
$i++;
}
return $texte;
}
// Fin du filtre sommaire
Découper l’article
/*
* +----------------------------------+
* Nom du Filtre : decouper_en_page
* +----------------------------------+
* Date : Vendredi 6 juin 2003
* Auteur : "gpl" : gpl@macplus.org
* Aurélien PIERARD : aurelien.pierard@sig.premier-ministre.gouv.fr
* +-------------------------------------+
* Fonctions de ce filtre :
* Il sert a présenter un article sur plusieurs pages
* +-------------------------------------+
*
* Pour toute suggestion, remarque, proposition d'ajout
* reportez-vous au forum de l'article :
* http://www.uzine.net/spip_contrib/article.php3?id_article=62
*/
function decouper_en_page($texte) {
global $artsuite, $var_recherche, $num_pages;
if (empty($artsuite)) $artsuite = 0;
// on divise la page (séparateur : "-----")
$page = split('-----', $texte);
// Nombre total de pages
$num_pages = count($page);
// Si une seule page ou numéro illégal, alors retourner tout le texte.
// Cas spécial : si var_recherche positionné, tout renvoyer pour permettre à la surbrillance de fonctionner correctement.
if ($num_pages == 1 || !empty($var_recherche) || $artsuite < 0 || $artsuite > $num_pages) {
// On place les ancres sur les intertitres
$texte = preg_replace("|\{\{\{(.*)\}\}\}|U","<a name=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$0</a>", $texte);
$array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $texte);
$res =count($array);
$i =1;
$texte=$array[0];
while($i<$res){
$texte=$texte.$i.$array[$i];
$i++;
}
return $texte;
}
$p_prec = $artsuite - 1;
$p_suiv = $artsuite + 1;
$uri_art = generer_url_article($GLOBALS['id_article']);
$uri_art .= strpos($uri_art, '?') ? '&' : '?';
// On place les ancres sur les intertitres
$page[$artsuite] = preg_replace("|\{\{\{(.*)\}\}\}|U","<a name=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\">$0</a>", $page[$artsuite]);
$array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $page[$artsuite]);
$res =count($array);
$i =1;
$page[$artsuite]=$array[0];
while($i<$res){
$page[$artsuite]=$page[$artsuite].$i.$array[$i];
$i++;
}
// Pagination
switch (TRUE) {
case ($artsuite == 0):
$precedent = "";
$suivant = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>";
break;
case ($artsuite == ($num_pages-1)):
$precedent = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>";
$suivant = "";
break;
default:
$precedent = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>";
$suivant = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>";
break;
}
for ($i = 0; $i < $num_pages; $i++) {
$j = $i;
if ($i == $artsuite) {
$milieu .= " <strong>" . ++$j . "</strong> ";
}
else {
$milieu .= " <a href='" . $uri_art . "artsuite=$i'>" . ++$j . "</a> ";
}
}
// Ici, on peut personnaliser la présentation
$resultat .= $page[$artsuite];
$resultat .= "<p class='pagination'><div class='pagination' align='center'>pages : $precedent $milieu $suivant</div></p>";
return $resultat;
}
// FIN du Filtre decouper_en_page
Utilisation :
- [(#TEXTE*|sommaire_article|propre)] pour afficher le sommaire de l’article
- [(#TEXTE*|decouper_en_page|propre|justifier)] pour afficher l’article.
Notez bien l’astérisque après #TEXTE ! Cette astérisque permet de désactiver les traitements par défaut de Spip sur le champ #TEXTE : c’est nécessaire ici parce que je veux traiter cinq traits d’union consécutifs qui sont transformés en <hr>
normalement.
- Rédigez vos articles en utilisant cinq traits d’union consécutifs à l’endroit qui doit recevoir la coupure.
- Tous ce qui se trouve entre {{{
et }}}
est considéré comme un titre à ajouter au sommaire de l’article.
À noter
Pour obtenir une ligne horizontale, la documentation de Spip stipule qu’une succession de quatre traits d’union ou plus est nécessaire. Avec ce filtre, c’est différent : quatre traits d’union provoque une ligne horizontale, cinq provoquent un saut de page. J’ai choisi ceci pour permettre d’avoir, dans l’hypothèse d’un autre squelette avec #TEXTE et non #TEXTE*, une ligne horizontale qui signale le découpage en pages.
Remarques :
Pour intégrer quelques choses uniquement à la dernière page (par exemple le forum de l’article ou le PS) tapez dans votre squellette :
<?
if ($artsuite==$num_pages-1){ ?>
#FORMULAIRE_FORUM
<? } ?>
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |