From 4877f3ed7fc00d86481f81ad3353024fa940a73c Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 6 Sep 2009 13:39:00 +0000
Subject: [PATCH] =?UTF-8?q?Correction=20de=20la=20pagination=20modifi?=
 =?UTF-8?q?=C3=A9e=20par=20[13993]#file0=20car=20il=20fallait=20comprendre?=
 =?UTF-8?q?=20que=20l'index=20ind=C3=A9fini=20=C3=A9tait=20volontaire,=20c?=
 =?UTF-8?q?harge=20=C3=A9tant=20donn=C3=A9e=20au=20filtre=20de=20paginatio?=
 =?UTF-8?q?n=20de=20g=C3=A9rer=20cet=20ind=C3=A9fini.=20On=20=C3=A9vite=20?=
 =?UTF-8?q?de=20ballader=20cet=20ind=C3=A9fini=20en=20confiant=20cette=20g?=
 =?UTF-8?q?estion=20au=20code=20compil=C3=A9,=20mais=20=C3=A7a=20ne=20fait?=
 =?UTF-8?q?=20que=20cacher=20un=20peu=20mieux=20l'entorse=20signal=C3=A9e:?=
 =?UTF-8?q?=20pourquoi=20les=20mod=C3=A8les=20ne=20fournissent=20pas=20les?=
 =?UTF-8?q?=20param=C3=A8tres=20d'URL=20si=20c'est=20cela=20qu'on=20veut?=
 =?UTF-8?q?=20=3F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Par ailleurs, amélioration de #ANCRE_PAGINATION, qui doit tenir compte d'une
éventuelle surcharge de la balise #PAGINATION.
---
 ecrire/inc/filtres.php    | 11 +----------
 ecrire/public/balises.php | 32 ++++++++++++++++++--------------
 2 files changed, 19 insertions(+), 24 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 55804ee69b..af35fe7d0d 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -1801,8 +1801,7 @@ function filtre_find($array, $val) {
 
 //
 // fonction standard de calcul de la balise #PAGINATION
-// on peut la surcharger en definissant dans mes_fonctions :
-// function pagination($total, $nom, $pas, $liste) {...}
+// on peut la surcharger en definissant filtre_pagination dans mes_fonctions
 //
 
 // http://doc.spip.org/@filtre_pagination_dist
@@ -1820,14 +1819,6 @@ function filtre_pagination_dist($total, $nom, $position, $pas, $liste = true, $m
 	if (!$liste)
 		return $ancres[$ancre];
 
-	// Si le contexte ne contient pas de debut_xx, on regarde les globales
-	// (de facon a permettre la pagination dans les modeles) ; c'est une
-	// legere entorse au schema de base (squelette+contexte => page), mais
-	// sinon il faut une usine a gaz pour passer debut_xx dans propre()...
-
-	if ($position === NULL)
-		$position = _request($debut);
-
 	$pagination = array(
 		'debut' => $debut,
 		'url' => parametre_url(self(),'fragment',''), // nettoyer l'id ahah eventuel
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 8cd31c2322..b6c73e54e3 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -10,7 +10,6 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-//
 // Ce fichier regroupe la quasi totalite des definitions de #BALISES de spip
 // Pour chaque balise, il est possible de surcharger, dans mes_fonctions,
 // la fonction balise_TOTO_dist par une fonction balise_TOTO() respectant la
@@ -18,7 +17,6 @@
 // elle recoit en entree un objet de classe CHAMP, le modifie et le retourne.
 // Cette classe est definie dans public/interfaces
 
-
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // http://doc.spip.org/@interprete_argument_balise
@@ -485,7 +483,17 @@ function balise_POPULARITE_dist ($p) {
 }
 
 // #PAGINATION
-// http://www.spip.net/fr_articleXXXX.html
+// Le code produit est trompeur, car les modeles ne fournissent pas Pile[0].
+// On produit un appel a _request si on ne l'a pas, mais c'est inexact:
+// l'absence peut etre due a une faute de frappe dans le contexte inclus.
+
+define('CODE_PAGINATION', 
+	'%s($Numrows["%s"]["grand_total"],
+ 		%s,
+		isset($Pile[0][%4$s])?$Pile[0][%4$s]:intval(_request(%4$s)),
+		%5$s, %6$s, %7$s, %8$s, array(%9$s))');
+
+// http://www.spip.net/fr_article3367.html
 // http://doc.spip.org/@balise_PAGINATION_dist
 function balise_PAGINATION_dist($p, $liste='true') {
 	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
@@ -522,32 +530,28 @@ function balise_PAGINATION_dist($p, $liste='true') {
 		$code_contexte = implode(',',$code_contexte);
 	} else $code_contexte = '';
 
-	$p->boucles[$b]->numrows = true;
 	$connect = $p->boucles[$b]->sql_serveur;
+	$pas = $p->boucles[$b]->total_parties;
 	$f_pagination = chercher_filtre('pagination');
 	$type = $p->boucles[$b]->modificateur['debut_nom'];
 	$modif = ($type[0]!=="'") ? "'debut'.$type" 
 	  : ("'debut" .substr($type,1));
 
-	$p->code = $f_pagination."(\$Numrows['$b']['grand_total'], $type,
-		isset(\$Pile[0][$modif])?\$Pile[0][$modif]:0,"
-	. $p->boucles[$b]->total_parties
-	. ", $liste, "
-	. ($__modele ? $__modele : "''")
-	. "," . _q($connect) 
-	. ", array($code_contexte)" 
-	. ")";
+	$p->code = sprintf(CODE_PAGINATION, $f_pagination,$b, $type, $modif, $pas, $liste, ($__modele ? $__modele : "''"), _q($connect), $code_contexte);
 
+	$p->boucles[$b]->numrows = true;
 	$p->interdire_scripts = false;
 	return $p;
 }
 
+
 // N'afficher que l'ancre de la pagination (au-dessus, par exemple, alors
 // qu'on mettra les liens en-dessous de la liste paginee)
 // http://doc.spip.org/@balise_ANCRE_PAGINATION_dist
 function balise_ANCRE_PAGINATION_dist($p) {
-	$p = balise_PAGINATION_dist($p, $liste='false');
-	return $p;
+	if ($f = charger_fonction('PAGINATION', 'balise', true))
+		return $f($p, $liste='false');
+	else return NULL; // ou une erreur ?
 }
 
 // equivalent a #TOTAL_BOUCLE sauf pour les boucles paginees, ou elle
-- 
GitLab