7 |
david |
1 |
<?php
|
|
|
2 |
/*vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
|
3 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
4 |
// | PHP version 4.1 |
|
|
|
5 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
6 |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
|
|
|
7 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
8 |
// | This library is free software; you can redistribute it and/or |
|
|
|
9 |
// | modify it under the terms of the GNU Lesser General Public |
|
|
|
10 |
// | License as published by the Free Software Foundation; either |
|
|
|
11 |
// | version 2.1 of the License, or (at your option) any later version. |
|
|
|
12 |
// | |
|
|
|
13 |
// | This library is distributed in the hope that it will be useful, |
|
|
|
14 |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
15 |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
|
|
16 |
// | Lesser General Public License for more details. |
|
|
|
17 |
// | |
|
|
|
18 |
// | You should have received a copy of the GNU Lesser General Public |
|
|
|
19 |
// | License along with this library; if not, write to the Free Software |
|
|
|
20 |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
|
|
21 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
22 |
// CVS : $Id: FRAG_Fragmenteur_Session.class.php,v 1.10 2005/03/08 11:25:48 jpm Exp $
|
|
|
23 |
/**
|
|
|
24 |
* API : fragmenteur utilisant les sessions.
|
|
|
25 |
*
|
|
|
26 |
* Cette librairie contient la classe fragmenteur qui permet de créer
|
|
|
27 |
* une série de chiffres pour naviguer de page en page lorsque le
|
|
|
28 |
* résultat d'une recherche est trop long.
|
|
|
29 |
* Cette extension du fragmenteur utilise les sessions.
|
|
|
30 |
*
|
|
|
31 |
*@package API
|
|
|
32 |
*@subpackage Framenteur
|
|
|
33 |
//Auteur original :
|
|
|
34 |
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
|
|
|
35 |
//Autres auteurs :
|
|
|
36 |
*@author Jean-Pascal MILCENT <jpm@clapas.org>
|
|
|
37 |
*@copyright Tela-Botanica 2000-2004
|
|
|
38 |
*@version $Revision: 1.10 $ $Date: 2005/03/08 11:25:48 $
|
|
|
39 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
40 |
*/
|
|
|
41 |
|
|
|
42 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
43 |
// | ENTETE du PROGRAMME |
|
|
|
44 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
45 |
/** Inclusion de la classe Fragmenteur principale. */
|
|
|
46 |
include_once 'FRAG_Fragmenteur.class.php';
|
|
|
47 |
|
|
|
48 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
49 |
// | CLASSES |
|
|
|
50 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
51 |
|
|
|
52 |
/**
|
|
|
53 |
* Classe pour séparer un résultat en plusieurs page.
|
|
|
54 |
*
|
|
|
55 |
* Basé sur la classe fragmenteur mais utilise les variables
|
|
|
56 |
* de session.
|
|
|
57 |
*
|
|
|
58 |
* @author Alexandre Granier <alexandre@tela-botanica.org>
|
|
|
59 |
*/
|
|
|
60 |
class fragmenteur_session
|
|
|
61 |
{
|
|
|
62 |
/**
|
|
|
63 |
* Contient le séparateur des chiffres
|
|
|
64 |
*
|
|
|
65 |
* @var string
|
|
|
66 |
* @access private
|
|
|
67 |
*/
|
|
|
68 |
var $separator;
|
|
|
69 |
var $nb_pages;
|
|
|
70 |
var $curr_page;
|
|
|
71 |
/**
|
|
|
72 |
* nombre maximum de numéros de pages qui doivent être affichées
|
|
|
73 |
*
|
|
|
74 |
* @var integer
|
|
|
75 |
* @access private
|
|
|
76 |
*/
|
|
|
77 |
var $max_fg_pages;
|
|
|
78 |
/**
|
|
|
79 |
* groupe courant de nombre de pages
|
|
|
80 |
* par défaut 10
|
|
|
81 |
*
|
|
|
82 |
* @var integer
|
|
|
83 |
* @access private
|
|
|
84 |
*/
|
|
|
85 |
var $curr_grp;
|
|
|
86 |
|
|
|
87 |
/**
|
|
|
88 |
* nbre de groupes total
|
|
|
89 |
*
|
|
|
90 |
* @var integer
|
|
|
91 |
* @access private
|
|
|
92 |
*/
|
|
|
93 |
var $nb_grp;
|
|
|
94 |
|
|
|
95 |
/**
|
|
|
96 |
*L'url de départ
|
|
|
97 |
*
|
|
|
98 |
* @var string
|
|
|
99 |
* @access private
|
|
|
100 |
*/
|
|
|
101 |
var $url ;
|
|
|
102 |
|
|
|
103 |
/**
|
|
|
104 |
*Le tableau des variables de l'url et des formulaire
|
|
|
105 |
*
|
|
|
106 |
* @var array
|
|
|
107 |
* @access private
|
|
|
108 |
*/
|
|
|
109 |
var $_variables ;
|
|
|
110 |
|
|
|
111 |
/**
|
|
|
112 |
*Le nombre de résultat par page
|
|
|
113 |
*
|
|
|
114 |
* @var integer
|
|
|
115 |
* @access private
|
|
|
116 |
*/
|
|
|
117 |
var $_pas ;
|
|
|
118 |
|
|
|
119 |
/**
|
|
|
120 |
*Le début de l'ensemble de résultat
|
|
|
121 |
*
|
|
|
122 |
* @var integer
|
|
|
123 |
* @access private
|
|
|
124 |
*/
|
|
|
125 |
var $_debut ;
|
|
|
126 |
|
|
|
127 |
/**
|
|
|
128 |
*Le nombre total de résultat
|
|
|
129 |
*
|
|
|
130 |
* @var integer
|
|
|
131 |
* @access private
|
|
|
132 |
*/
|
|
|
133 |
var $_nb_total ;
|
|
|
134 |
|
|
|
135 |
function fragmenteur_session ($caractere = ' - ', $nombre_p = 10)
|
|
|
136 |
{
|
|
|
137 |
// On va utiliser toutes les variables de l'url et des formulaires disponibles
|
|
|
138 |
global $HTTP_POST_VARS, $_GET, $HTTP_GET_VARS, $GS_GLOBAL ;
|
|
|
139 |
$this->_variables = array_merge($HTTP_GET_VARS, $HTTP_POST_VARS, $_GET) ;
|
|
|
140 |
// On récupère toutes les variables de sessions
|
|
|
141 |
if (!isset($_SESSION['fragment'])) {
|
|
|
142 |
// Il n'y a pas de variable de session, on en crée une et on y met $this->_variables
|
|
|
143 |
$_SESSION['fragment'] = $this->_variables;
|
|
|
144 |
} else {
|
|
|
145 |
// On récupère la variable et on l'affecte à $this->_variables
|
|
|
146 |
// en laissant cependant les valeurs existant déjà dans $this->_variables
|
|
|
147 |
// mise à jour de la variable de session
|
|
|
148 |
$tableau_temp = $_SESSION['fragment'];
|
|
|
149 |
foreach ($tableau_temp as $key=>$value) {
|
|
|
150 |
if (!isset ($this->_variables[$key]) || ($this->_variables[$key] == '')) {
|
|
|
151 |
if (!isset($HTTP_POST_VARS[$key])) {
|
|
|
152 |
$this->_variables[$key] = $tableau_temp[$key] ;
|
|
|
153 |
} else {
|
|
|
154 |
$this->_variables[$key] = '';
|
|
|
155 |
}
|
|
|
156 |
}
|
|
|
157 |
}
|
|
|
158 |
$_SESSION['fragment'] = $this->_variables;
|
|
|
159 |
}
|
|
|
160 |
$this->separator = $caractere;
|
|
|
161 |
$this->max_fg_pages = $nombre_p;
|
|
|
162 |
// on initialise $this->_debut avec soit 0, soit la valeur de $this->_variables['debut']
|
|
|
163 |
if (isset($this->_variables['debut']) && $this->_variables['debut'] != '') {
|
|
|
164 |
$this->_debut = $this->_variables['debut'] ;
|
|
|
165 |
} else {
|
|
|
166 |
$this->_debut = 0;
|
|
|
167 |
}
|
|
|
168 |
// on initialise $this->_pas avec soit 20, soit la valeur de $this->_variables['T_REPONSE']
|
|
|
169 |
if (isset ($this->_variables['T_REPONSE']) && $this->_variables['T_REPONSE'] != '') {
|
|
|
170 |
$this->_pas = $this->_variables['T_REPONSE'];
|
|
|
171 |
} else {
|
|
|
172 |
$this->_pas = 20;
|
|
|
173 |
}
|
|
|
174 |
}
|
|
|
175 |
|
|
|
176 |
/**
|
|
|
177 |
* fragmente() - Méthode qui fragmente des résultats.
|
|
|
178 |
*
|
|
|
179 |
* Permet de fragmenter des résultats.
|
|
|
180 |
* Le tableau des données à passer en paramêtre doit contenir a minima :
|
|
|
181 |
* - $tableau['pstart'] : valeur du début de la page
|
|
|
182 |
* - $tableau['step'] : valeur du pas (nombre d'items par pages)
|
|
|
183 |
* - $tableau['pend']
|
|
|
184 |
* Pour faire figurer des images sur les liens suivant, précédent, début et fin utiliser
|
|
|
185 |
* des css.
|
|
|
186 |
*
|
|
|
187 |
* @access public
|
|
|
188 |
* @param array Tableau qui contient les variables du fragmenteur.
|
|
|
189 |
* @param int Le nombre de résultat total.
|
|
|
190 |
* @return string Le xhtml permettant de naviguer dans les résultats.
|
|
|
191 |
*/
|
|
|
192 |
function fragmente($nbr_total)
|
|
|
193 |
{
|
|
|
194 |
$startPrev = $startNext = $this->_debut;
|
|
|
195 |
// Initialisation des variables
|
|
|
196 |
$var_fragmenteur = '';
|
|
|
197 |
$this->_nb_total = $nbr_total ;
|
|
|
198 |
$how_bloc = $this->_pas ;
|
|
|
199 |
|
|
|
200 |
$how_pages = ceil($nbr_total / $how_bloc);
|
|
|
201 |
$this->curr_page = ceil(($this->_debut / $how_bloc))+1;
|
|
|
202 |
$this->nb_pages = $how_pages;
|
|
|
203 |
$this->nb_grp = ceil(($this->nb_pages)/($this->max_fg_pages));
|
|
|
204 |
$this->curr_grp = floor(($this->_debut + ($this->max_fg_pages * $this->_pas))/(($this->max_fg_pages)*$this->_pas))-1;
|
|
|
205 |
// 1- Altération des données de tmpTab pour passer les paramètres de saut de page
|
|
|
206 |
// 1-a- tmpTab de la page précédente
|
|
|
207 |
if ($startPrev > 0) $startPrev = $startPrev - $this->_pas ;
|
|
|
208 |
// 1-b- tmpTab de la page suivante
|
|
|
209 |
$startNext = $startNext + $this->_pas;
|
|
|
210 |
|
|
|
211 |
// Bouton pour groupes de pages précédent
|
|
|
212 |
if ((($this->nb_pages) > ($this->max_fg_pages))&&(($this->curr_page) > ($this->max_fg_pages))) {
|
|
|
213 |
$pstart = ((($this->curr_grp)-1)*($this->max_fg_pages)*$this->_pas);
|
|
|
214 |
$txt_depart = (($this->max_fg_pages)*$this->_pas).' données précédentes';
|
|
|
215 |
$var_fragmenteur .= '<a class="frag_depart" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_depart.'" >'.
|
|
|
216 |
'<span>'.$txt_depart.'</span>'.
|
|
|
217 |
'</a>'."\n";
|
|
|
218 |
}
|
|
|
219 |
// Bouton pour resultats précédent
|
|
|
220 |
if ($this->_debut > 0) {
|
|
|
221 |
$pstart = $startPrev;
|
|
|
222 |
$txt_precedent = $this->_pas.' données précédentes';
|
|
|
223 |
$var_fragmenteur .= '<a class="frag_precedent" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_precedent.'" >'.
|
|
|
224 |
'<span>'.$txt_precedent.'</span>'.
|
|
|
225 |
'</a>'."\n";
|
|
|
226 |
}
|
|
|
227 |
// Fragmentation en page
|
|
|
228 |
$tmp_i = 1 + $this->curr_grp * $this->max_fg_pages ;
|
|
|
229 |
$j = 1;
|
|
|
230 |
while (($tmp_i <= $how_pages) && ($tmp_i <= (($this->max_fg_pages) * (($this->curr_grp) + 1))) && $how_pages != 1) {
|
|
|
231 |
if ($this->curr_page == $tmp_i) {
|
|
|
232 |
$var_fragmenteur .= '<span class="frag_page_courante">'.$tmp_i.'</span>'."\n";
|
|
|
233 |
} else {
|
|
|
234 |
$tmp_go = ($tmp_i - 1) * $how_bloc;
|
|
|
235 |
$pstart = $tmp_go ;
|
|
|
236 |
$var_fragmenteur .= '<a class="frag_page_autre" href="'.$this->url.'&debut='.$pstart.'">'.
|
|
|
237 |
'<span>'.$tmp_i.'</span>'.
|
|
|
238 |
'</a>'."\n";
|
|
|
239 |
}
|
|
|
240 |
if (($tmp_i < $how_pages) && ($j<($this->max_fg_pages))) {
|
|
|
241 |
$var_fragmenteur .= '<span class="frag_separateur">'.$this->separator.'</span>'."\n";
|
|
|
242 |
}
|
|
|
243 |
$tmp_i++;
|
|
|
244 |
$j++;
|
|
|
245 |
}
|
|
|
246 |
|
|
|
247 |
// Bouton pour resultats suivant
|
|
|
248 |
if ($this->_debut + $this->_pas < $nbr_total) {
|
|
|
249 |
$pstart = $startNext ;
|
|
|
250 |
$var_fragmenteur .= ' ';
|
|
|
251 |
$txt_suivant = $this->_pas.' données suivantes';
|
|
|
252 |
$var_fragmenteur .= '<a class="frag_suivant" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_suivant.'" >'.
|
|
|
253 |
'<span>'.$txt_suivant.'</span>'.
|
|
|
254 |
'</a>'."\n";
|
|
|
255 |
|
|
|
256 |
}
|
|
|
257 |
// Bouton pour groupes de pages suivants
|
|
|
258 |
if ((($this->nb_grp)>1)&&(($this->curr_grp)<(($this->nb_grp)-1))) {
|
|
|
259 |
$pstart = ((($this->curr_grp)+1)*($this->max_fg_pages)*$this->_pas) ;
|
|
|
260 |
$txt_fin = (($this->max_fg_pages)*$this->_pas).' données suivantes';
|
|
|
261 |
$var_fragmenteur .= '<a class="frag_fin" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_fin.'" >'.
|
|
|
262 |
'<span>'.$txt_fin.'</span>'.
|
|
|
263 |
'</a>'."\n";
|
|
|
264 |
}
|
|
|
265 |
|
|
|
266 |
if ($var_fragmenteur == '') {
|
|
|
267 |
$var_fragmenteur = ' ';
|
|
|
268 |
}
|
|
|
269 |
return $var_fragmenteur;
|
|
|
270 |
}
|
|
|
271 |
|
|
|
272 |
/**
|
|
|
273 |
* Méthode setURL() -
|
|
|
274 |
*
|
|
|
275 |
* @access public
|
|
|
276 |
* @param url Chaine qui contient l'url de départ
|
|
|
277 |
*/
|
|
|
278 |
function setURL($url)
|
|
|
279 |
{
|
|
|
280 |
$this->url = $url;
|
|
|
281 |
}
|
|
|
282 |
|
|
|
283 |
/** getVariable() Renvoie la valeur d'une variable de l'url ou d'un formulaire
|
|
|
284 |
*
|
|
|
285 |
* @access public
|
|
|
286 |
* @param string Nom de la variable
|
|
|
287 |
* @return mixed La valeur de la variable ou la chaine vide
|
|
|
288 |
*/
|
|
|
289 |
function getVariable ($cle)
|
|
|
290 |
{
|
|
|
291 |
if (isset($this->_variables[$cle])) {
|
|
|
292 |
return $this->_variables[$cle];
|
|
|
293 |
} else {
|
|
|
294 |
return '';
|
|
|
295 |
}
|
|
|
296 |
}
|
|
|
297 |
|
|
|
298 |
/** setVariable() Affecte une valeur à une variable
|
|
|
299 |
*
|
|
|
300 |
* @param string clé
|
|
|
301 |
* @param string valeur
|
|
|
302 |
* @return void
|
|
|
303 |
*/
|
|
|
304 |
function setVariable ($cle, $valeur)
|
|
|
305 |
{
|
|
|
306 |
$tableau = $_SESSION['fragment'];
|
|
|
307 |
$tableau[$cle] = $valeur ;
|
|
|
308 |
$_SESSION['fragment'] = $tableau;
|
|
|
309 |
}
|
|
|
310 |
|
|
|
311 |
/** fixerLePas() Permet d'indiquer le nombre de résultat souhaité par page
|
|
|
312 |
*
|
|
|
313 |
* @param int le pas
|
|
|
314 |
* @return void
|
|
|
315 |
*/
|
|
|
316 |
function fixerLePas ($pas)
|
|
|
317 |
{
|
|
|
318 |
$this->_pas = $pas;
|
|
|
319 |
}
|
|
|
320 |
|
|
|
321 |
/** lireLePas() Permet d'obtenir le nombre de résultat souhaité par page
|
|
|
322 |
*
|
|
|
323 |
* @return integer le pas
|
|
|
324 |
*/
|
|
|
325 |
function lireLePas ()
|
|
|
326 |
{
|
|
|
327 |
return $this->_pas;
|
|
|
328 |
}
|
|
|
329 |
|
|
|
330 |
/** lireLeDebut() Permet d'obtenir le nombre du début du résultat
|
|
|
331 |
*
|
|
|
332 |
* @return integer le début
|
|
|
333 |
*/
|
|
|
334 |
function lireLeDebut ()
|
|
|
335 |
{
|
|
|
336 |
return $this->_debut;
|
|
|
337 |
}
|
|
|
338 |
|
|
|
339 |
/** fixerLeDebut() Permet d'indiquer le nombre du début du résultat
|
|
|
340 |
*
|
|
|
341 |
* @return integer le début
|
|
|
342 |
*/
|
|
|
343 |
function fixerLeDebut ($debut)
|
|
|
344 |
{
|
|
|
345 |
$this->_debut = $debut;
|
|
|
346 |
}
|
|
|
347 |
|
|
|
348 |
/** affNbRes() Affiche le nombre de résultat
|
|
|
349 |
*
|
|
|
350 |
* Permet de créer un petit texte uniforme du type "il y a x resultats sur y"...
|
|
|
351 |
* Possibilité de paramétrer un "modèle" pour afficher selon différentes mises
|
|
|
352 |
* en forme.
|
|
|
353 |
*
|
|
|
354 |
* @access public
|
|
|
355 |
* @param int nombre d'items trouvés par la requête
|
|
|
356 |
* @return string une phrase en HTML
|
|
|
357 |
*/
|
|
|
358 |
function affNbRes($nombre_total)
|
|
|
359 |
{
|
|
|
360 |
$this->_nb_total = $nombre_total ;
|
|
|
361 |
// init de $var_affiche
|
|
|
362 |
$var_affiche = '';
|
|
|
363 |
if ($this->_nb_total > 1) {
|
|
|
364 |
$pluriel_loc = 's';
|
|
|
365 |
} else {
|
|
|
366 |
$pluriel_loc = '';
|
|
|
367 |
}
|
|
|
368 |
if ($this->_nb_total > 1) {
|
|
|
369 |
$pluriel_tot = 's';
|
|
|
370 |
} else {
|
|
|
371 |
$pluriel_tot = '';
|
|
|
372 |
}
|
|
|
373 |
if ($this->_nb_total > 0) {
|
|
|
374 |
$add_from = $this->_debut + 1;
|
|
|
375 |
$tmp_num = $this->_debut + $this->_pas ;
|
|
|
376 |
if ($tmp_num < $this->_nb_total) {
|
|
|
377 |
$add_to = "$tmp_num";
|
|
|
378 |
} else {
|
|
|
379 |
$add_to = $this->_nb_total ;
|
|
|
380 |
}
|
|
|
381 |
}
|
|
|
382 |
$var_affiche .= '<b>'.$this->_nb_total.'</b>'.' résultat'.$pluriel_loc."\n";
|
|
|
383 |
if ($this->_nb_total > 0) {
|
|
|
384 |
$var_affiche .= ' Affichage des données <b>'.$add_from.'</b> à <b>'.$add_to.'</b>.'."\n";
|
|
|
385 |
}
|
|
|
386 |
|
|
|
387 |
return $var_affiche;
|
|
|
388 |
}
|
|
|
389 |
}//Fin classe.
|
|
|
390 |
|
|
|
391 |
/* +--Fin du code ---------------------------------------------------------------------------------------+
|
|
|
392 |
*
|
|
|
393 |
* $Log: FRAG_Fragmenteur_Session.class.php,v $
|
|
|
394 |
* Revision 1.10 2005/03/08 11:25:48 jpm
|
|
|
395 |
* Remplacement d'id en class car le fragmenteur peut être afficher plusieurs fois dans la même page XHTML.
|
|
|
396 |
*
|
|
|
397 |
* Revision 1.9 2005/03/03 08:40:48 jpm
|
|
|
398 |
* Correction de gestion des guillemets.
|
|
|
399 |
*
|
|
|
400 |
* Revision 1.8 2005/02/28 15:42:15 jpm
|
|
|
401 |
* Initialisation d'une variable de session.
|
|
|
402 |
*
|
|
|
403 |
* Revision 1.7 2005/02/24 18:32:08 jpm
|
|
|
404 |
* Correction : changement d'un id en class.
|
|
|
405 |
*
|
|
|
406 |
* Revision 1.6 2005/02/24 17:16:10 jpm
|
|
|
407 |
* Modif des noms des id.
|
|
|
408 |
*
|
|
|
409 |
* Revision 1.5 2005/02/23 17:28:35 jpm
|
|
|
410 |
* Suppression d'image dans le fragmenteur et remplacement par des styles css.
|
|
|
411 |
* Amélioration du code html.
|
|
|
412 |
*
|
|
|
413 |
* Revision 1.4 2005/02/22 19:32:45 jpm
|
|
|
414 |
* Initialisation de variables.
|
|
|
415 |
*
|
|
|
416 |
* Revision 1.3 2005/02/22 16:21:28 jpm
|
|
|
417 |
* Mise à jour : utilisation des session, mise en forme et suppression d'appel de fichiers inutiles.
|
|
|
418 |
*
|
|
|
419 |
* Revision 1.2 2004/09/11 19:12:38 jpm
|
|
|
420 |
* Début mise en forme.
|
|
|
421 |
*
|
|
|
422 |
*
|
|
|
423 |
* +--Fin du code ----------------------------------------------------------------------------------------+
|
|
|
424 |
*/
|
|
|
425 |
?>
|