diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 4d36e320bbe7d5b22ced50131d097366d10ebaef..c8ac60ca90d2ef15a15ddf15148e3c128ac56522 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 953e80ed93b389d4592b7d4886dfa63cbb10bc59..7efc45ac6c028b8d83c0229683edd58387dfd57a 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