diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index ee2afd387ffda2223036d0ff1f659107a6a7bc50..b90c3f39bfe091cae53cb4a2bec894a70a5a3313 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -2648,6 +2648,51 @@ function form_hidden($action) { return $hidden; } +function pagination($total, $debut, $pas) { + global $pagination_item_avant, $pagination_item_apres, $pagination_separateur; + global $pagination_max, $pagination_max_texte; + tester_variable('pagination_separateur', ' | '); + tester_variable('pagination_max_texte', '...'); + + $pagination = array( + 'lien_base' => self(), + 'total' => $total, + 'position' => intval(_request($debut)), + 'pas' => $pas, + 'nombre_pages' => floor(($total-1)/$pas)+1, + 'page_courante' => floor(intval(_request($debut))/$pas)+1, + 'lien_pagination' => '<a href="@url@">@item@</a>' + ); + + if($pagination_max == 0 OR $pagination_max>=$pagination['nombre_pages']) { + $premiere = 1; + $derniere = $pagination['nombre_pages']; + $texte_avant = ''; + $texte_apres = ''; + } + else { + $premiere = max(1, $pagination['page_courante']-floor($pagination_max/2)); + $derniere = min($pagination['nombre_pages'], $premiere+$pagination_max-1); + $premiere = $derniere == $pagination['nombre_pages'] ? $derniere-$pagination_max+1 : $premiere; + $texte_avant = $premiere>1 ? $pagination_max_texte.' ' : ''; + $texte_apres = $derniere<$pagination['nombre_pages'] ? ' '.$pagination_max_texte : ''; + } + + $texte = ''; + if($pagination['nombre_pages']>1) { + for($i = $premiere;$i<=$derniere;$i++) { + $url = parametre_url($pagination['lien_base'], $debut, strval(($i-1)*$pas)); + $_item = strval($i); + $item = ($i != $pagination['page_courante']) ? + preg_replace(array(',@url@,', ',@item@,'), array($url, $_item), $pagination['lien_pagination']) : + $_item; + $texte .= $pagination_item_avant.$item.$pagination_item_apres; + if($i<$pagination['nombre_pages']) $texte .= $pagination_separateur; + } + return $texte_avant.$texte.$texte_apres; + } + return ''; +} ### fonction depreciee, laissee ici pour compat ascendante 1.9 function entites_unicode($texte) { return charset2unicode($texte); } diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 09f6d98489aba290cfa84e9c860e28b02ca2d9c2..b15a898519b1fc749be8e98ba2568f0004973620 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -556,6 +556,40 @@ function balise_POPULARITE_dist ($p) { return $p; } +// #PAGINATION +// http://www.spip.net/fr_articleXXXX.html +function balise_PAGINATION_dist($p) { + $b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere']; + if ($b === '') { + erreur_squelette( + _T('zbug_champ_hors_boucle', + array('champ' => "#$b" . 'PAGINATION') + ), $p->id_boucle); + $p->code = "''"; + } + elseif (!$p->param || $p->param[0][0]) { + erreur_squelette( + /*_T('zbug_champ_manquant', + array('champ' => '#PAGINATION')*/ + _L('paramétre manquant pour #PAGINATION') + , $p->id_boucle); + $p->code = "''"; + } + else { + $nom_boucle = calculer_liste($p->param[0][1], + $p->descr, + $p->boucles, + $p->id_boucle); + $nom_boucle = str_replace("'", '', $nom_boucle); + $pas = _PAS>0 ? _PAS : 10; + + $p->boucles[$b]->numrows = true; + $p->code = "pagination(\$Numrows['$b']['total'],'debut".$nom_boucle."',".$pas.")"; + } + + $p->interdire_scripts = true; + return $p; +} // // Fonction commune aux balises #LOGO_XXXX @@ -1011,4 +1045,4 @@ function balise_CACHE_dist($p) { return $p; } -?> +?> \ No newline at end of file diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 11d53199137055d616b063eedf45fa96e46b7a2e..b4081f861ca2b55a811e677ee72fff040e01704a 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -90,6 +90,15 @@ function critere_debut_dist($idb, &$boucles, $crit) { $crit->param[1][0]->texte . '"' ; } +// {pagination} +// http://www.spip.net/@pagination +function critere_pagination_dist($idb, &$boucles, $crit) { + $pas = _PAS>0 ? _PAS : 10; + $boucle = &$boucles[$idb]; + $boucle->limit = 'intval($GLOBALS["debut'.$idb.'"]) . ",'.$pas.'"'; +} + + // {recherche} // http://www.spip.net/@recherche