From 2982ba718304bc031f20849fd2e5c5ba930b84d2 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 23 Apr 2009 18:35:01 +0000 Subject: [PATCH] permettre a la pagination de trouver toute seule la page qui contient un id donne : Exemple : Dans une boucle comme celle la <B_pagi> [<p class="pagination">(#PAGINATION)</p>] <ul> <BOUCLE_pagi(ARTICLES){par titre}{pagination}> <li>#ID_ARTICLE : #TITRE</li> </BOUCLE_pagi> </ul> </B_pagi> &debut_pagi=10 place la pagination sur la deuxieme page (a partir du 10eme element de la liste) &debut_pagi=@231 place la pagination sur la page qui contient l'id_article 231 Permet donc de donner une url permanente vers un item d'une liste paginee. Mais attention aux moteurs de recherche qui risquent de visiter chaque url et de fatiguer votre serveur ! --- ecrire/public/criteres.php | 9 ++++++++- ecrire/public/quete.php | 13 +++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 4d36e320bb..c8ac60ca90 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -146,9 +146,16 @@ function critere_pagination_dist($idb, &$boucles, $crit) { $boucle = &$boucles[$idb]; $boucle->mode_partie = 'p+'; - $boucle->partie = 'intval(isset($Pile[0][\'debut\'.'.$debut.']) ? $Pile[0][\'debut\'.'.$debut.'] : _request(\'debut\'.'.$debut.'))'; + $boucle->partie = 'substr($partie=(isset($Pile[0][\'debut\'.'.$debut.']) ? $Pile[0][\'debut\'.'.$debut.'] : _request(\'debut\'.'.$debut.')),0,1)==\'@\'? +($Pile[0][\'debut\'.'.$debut.'] = quete_debut_pagination(\''.$boucle->primary.'\',substr($partie,1),'.intval($pas).',calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect))) +:intval($partie)'; $boucle->modificateur['debut_nom'] = $debut; $boucle->total_parties = $pas; + + // ajouter la cle primaire dans le select pour pouvoir gerer la pagination referencee par @id + $t = $boucle->id_table . '.' . $boucle->primary; + if (!in_array($t, $boucles[$idb]->select)) + $boucle->select[]= $t; } // {recherche} ou {recherche susan} diff --git a/ecrire/public/quete.php b/ecrire/public/quete.php index 953e80ed93..7efc45ac6c 100644 --- a/ecrire/public/quete.php +++ b/ecrire/public/quete.php @@ -236,4 +236,17 @@ function calcul_exposer ($id, $prim, $reference, $parent, $type, $connect='') { return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : ''; } +function quete_debut_pagination($primary,$valeur,$pas,$res){ + $pos = 0; + while ($row = sql_fetch($res) AND $row[$primary]!==$valeur) + $pos++; + sql_free($res); + // si on a pas trouve + if ($row[$primary]!==$valeur) + return 0; + + // sinon, calculer le bon numero de page + return floor($pos/$pas)*$pas; +} + ?> \ No newline at end of file -- GitLab