Очень часто на медийных сайтах, в первую очередь на сайтах газет и других печатных изданий большая статья автоматически разбивается на несколько страниц.
Пример можно посмотреть по ссылке:
http://www.nytimes.com/2011/12/25/business/bourbons-all-american-roar.html?ref=global-home
Что бы такой функционал добавить на SPIP сайт необходимо создать новый фильтр. Информацию о нем подсказал Gilles Vincent, за что ему отдельное спасибо.
/*
* +----------------------------------+
* Nom du Filtre : decouper_en_page
* +----------------------------------+
* Date : Vendredi 6 juin 2003
* Auteur : "gpl" : gpl@macplus.org
* Aurelien PIERARD : aurelien.pierard@sig.premier-ministre.gouv.fr
* +-------------------------------------+
* Fonctions de ce filtre :
* Il sert a presenter 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($text,$id_article) {
$nextart = $_GET['artsuite'];
if (empty($nextart)) $nextart = 0;
// page split (separator : "-----")
$page = split('-----', $text);
// Total pages number
$num_pages = count($page);
// If only one page, or at the result of a seach, return everything.
if ($num_pages == 1 || !empty($var_recherche) || $nextart < 0 || $nextart > $num_pages) {
// Add anchors to <h3>
$text = preg_replace("|\{\{\{(.*)\}\}\}|U","<a id=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\"></a>$0", $text);
$array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $text);
$res =count($array);
$i =1;
$text=$array[0];
while($i<$res){
$text=$text.$i.$array[$i];
$i++;
}
return $text;
}
$p_prec = $nextart - 1;
$p_suiv = $nextart + 1;
$uri_art = generer_url_entite($id_article, "article");
$uri_art .= strpos($uri_art, '?') ? '&' : '?';
// Add anchors to <h3>
$page[$nextart] = preg_replace("|\{\{\{(.*)\}\}\}|U","<a id=\"sommaire_#NB_TITRE_DE_MON_ARTICLE#\"></a>$0", $page[$nextart]);
$array = explode("#NB_TITRE_DE_MON_ARTICLE#" , $page[$nextart]);
$res =count($array);
$i =1;
$page[$nextart]=$array[0];
while($i<$res){
$page[$nextart]=$page[$nextart].$i.$array[$i];
$i++;
}
// Pagination
switch (TRUE) {
case ($nextart == 0):
$previous = "";
$next = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>";
break;
case ($nextart == ($num_pages-1)):
$previous = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>";
$next = "";
break;
default:
$previous = "<a href='" . $uri_art . "artsuite=" . $p_prec . "'><<</a>";
$next = "<a href='" . $uri_art . "artsuite=" . $p_suiv . "'>>></a>";
break;
}
for ($i = 0; $i < $num_pages; $i++) {
$j = $i;
if ($i == $nextart) {
$actual .= " <strong>" . ++$j . "</strong> ";
}
else {
$actual .= " <a href='" . $uri_art . "artsuite=$i'>" . ++$j . "</a> ";
}
}
// Here, you can customize
$result .= $page[$nextart];
$result .= "<div class='pagination' style='text-align:center'>pages : $previous $actual $next</div>";
return $result;
}
// FIN du Filtre decouper_en_page