2150 |
mathias |
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.class.php,v 1.8 2005/03/08 11:25:48 jpm Exp $
|
|
|
23 |
/**
|
|
|
24 |
* API : fragmenteur.
|
|
|
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 |
* Une variable globale $TransTab est nécessaire d'où les fonctions :
|
|
|
30 |
* - UnstoreTransTab()
|
|
|
31 |
* - AffTxtNbRes()
|
|
|
32 |
*
|
|
|
33 |
*@package API
|
|
|
34 |
*@subpackage Framenteur
|
|
|
35 |
//Auteur original :
|
|
|
36 |
*@author Jean-Charles GRANGER <tela@vecteur.org>
|
|
|
37 |
//Autres auteurs :
|
|
|
38 |
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
|
|
|
39 |
*@author Jean-Pascal MILCENT <jpm@clapas.org>
|
|
|
40 |
*@copyright Tela-Botanica 2000-2004
|
|
|
41 |
*@version $Revision: 1.8 $ $Date: 2005/03/08 11:25:48 $
|
|
|
42 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
43 |
*/
|
|
|
44 |
|
|
|
45 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
46 |
// | ENTETE du PROGRAMME |
|
|
|
47 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
48 |
/*Mettre ici les inclusions de fichiers*/
|
|
|
49 |
|
|
|
50 |
include_once 'FRAG_fragmenteur.fonct.php';
|
|
|
51 |
|
|
|
52 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
53 |
// | CLASSES |
|
|
|
54 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
55 |
/*Mettre ici la liste de fonctions.*/
|
|
|
56 |
/**
|
|
|
57 |
* fragmenteur() - Classe pour séparer un résultat en plusieurs pages.
|
|
|
58 |
*
|
|
|
59 |
* Permet de créer un système de navigation
|
|
|
60 |
* de page de résultat en page de résultat.
|
|
|
61 |
*
|
|
|
62 |
* @author Jean-Charles GRANGER <tela@vecteur.org>
|
|
|
63 |
*/
|
|
|
64 |
class fragmenteur {
|
|
|
65 |
// Propriétés
|
|
|
66 |
var $separator;
|
|
|
67 |
var $nb_pages;
|
|
|
68 |
var $curr_page;
|
|
|
69 |
var $max_fg_pages; // nombre maximum de numéros de pages qui doivent être affichées
|
|
|
70 |
var $curr_grp; // groupe courrant de nombre de pages
|
|
|
71 |
var $nb_grp; // nbre de groupes total
|
|
|
72 |
var $url;
|
|
|
73 |
// Constructeur
|
|
|
74 |
function fragmenteur($caractere = ' - ', $nombre_p = 10, $url = null)
|
|
|
75 |
{
|
|
|
76 |
$this->separator = $caractere;
|
|
|
77 |
$this->max_fg_pages = $nombre_p;
|
|
|
78 |
if (is_null($url)) {
|
|
|
79 |
$this->url = $GLOBALS['_GEN_commun']['url']->geturl();
|
|
|
80 |
} else {
|
|
|
81 |
$this->url = $url;
|
|
|
82 |
}
|
|
|
83 |
}
|
|
|
84 |
|
|
|
85 |
/**
|
|
|
86 |
* fragmente() - Méthode qui fragmente des résultats.
|
|
|
87 |
*
|
|
|
88 |
* Permet de fragmenter des résultats.
|
|
|
89 |
* Le tableau des données à passer en paramêtre doit contenir a minima :
|
|
|
90 |
* - $tableau['pstart'] : valeur du début de la page
|
|
|
91 |
* - $tableau['step'] : valeur du pas (nombre d'items par pages)
|
|
|
92 |
* - $tableau['pend']
|
|
|
93 |
* Pour faire figurer des images sur les liens suivant, précédent, début et fin utiliser
|
|
|
94 |
* des css.
|
|
|
95 |
*
|
|
|
96 |
*@param array tableau qui contient les variables du fragmenteur.
|
|
|
97 |
*@param int le nombre de résultat total.
|
|
|
98 |
*@return string le xhtml permettant de naviguer dans les résultats.
|
|
|
99 |
*/
|
|
|
100 |
function fragmente($tableau, $nbr_total)
|
|
|
101 |
{
|
|
|
102 |
$startPrev = $startNext = $tableau['pstart'];
|
|
|
103 |
|
|
|
104 |
// Initialisation des variables
|
|
|
105 |
$var_fragmenteur = '';
|
|
|
106 |
$stockagevar = '';
|
|
|
107 |
|
|
|
108 |
$how_bloc = $tableau['step'];
|
|
|
109 |
|
|
|
110 |
$how_pages = ceil($nbr_total / $how_bloc);
|
|
|
111 |
$current_page = ceil(($tableau['pstart'] / $how_bloc)) + 1;
|
|
|
112 |
|
|
|
113 |
$this->nb_pages = $how_pages;
|
|
|
114 |
$this->curr_page = $current_page;
|
|
|
115 |
|
|
|
116 |
$this->nb_grp = ceil(($this->nb_pages) / ($this->max_fg_pages));
|
|
|
117 |
$this->curr_grp = floor(($tableau['pstart'] + ($this->max_fg_pages * $tableau['step'])) / ($this->max_fg_pages * $tableau['step'])) - 1;
|
|
|
118 |
$e = 'nb_grp: '.$this->nb_grp.'- curr_grp: '.$this->curr_grp;
|
|
|
119 |
trigger_error($e, E_USER_WARNING);
|
|
|
120 |
//echo $e;
|
|
|
121 |
// 1- Altération des données de tmpTab pour passer les paramètres de saut de page
|
|
|
122 |
|
|
|
123 |
// 1-a- tmpTab de la page précédente
|
|
|
124 |
if ($startPrev > 0) {
|
|
|
125 |
$startPrev = $startPrev - $tableau['step'];
|
|
|
126 |
}
|
|
|
127 |
// 1-b- tmpTab de la page suivante
|
|
|
128 |
$startNext = $startNext + $tableau['step'];
|
|
|
129 |
|
|
|
130 |
// Création des variables mises dans le tableau, pour les passer aux pages successives
|
|
|
131 |
if (empty($tableau['args'])) {
|
|
|
132 |
$tableau['args'] = '';
|
|
|
133 |
}
|
|
|
134 |
foreach($tableau as $tmp_stock => $value) {
|
|
|
135 |
if (($tmp_stock != 'args') && ($tmp_stock != 'pstart')) {
|
|
|
136 |
$stockagevar = $stockagevar.$tmp_stock.','.$value.'!';
|
|
|
137 |
}
|
|
|
138 |
}
|
|
|
139 |
|
|
|
140 |
// Ligne suivante désuette ??
|
|
|
141 |
$stockagevar = ereg_replace(' ', '{', $stockagevar);
|
|
|
142 |
|
|
|
143 |
// Bouton pour groupes de pages précédent
|
|
|
144 |
|
|
|
145 |
if ((($this->nb_pages) > ($this->max_fg_pages)) && (($this->curr_page) > ($this->max_fg_pages))) {
|
|
|
146 |
$txt_depart = ( ($this->max_fg_pages) * $tableau['step'] ).' données précédentes';
|
|
|
147 |
$var_fragmenteur .= '<a class="frag_depart" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.
|
|
|
148 |
((($this->curr_grp) - 1) * ($this->max_fg_pages) * $tableau['step']).'!'.$tableau['args'].'" title="'.$txt_depart.'" >'.
|
|
|
149 |
'<span>'.$txt_depart.'</span>'.
|
|
|
150 |
'</a>'."\n";
|
|
|
151 |
}
|
|
|
152 |
// Bouton pour resultats précédent
|
|
|
153 |
|
|
|
154 |
if ($tableau['pstart'] > 0) {
|
|
|
155 |
$txt_precedent = $tableau['step'].' données précédentes';
|
|
|
156 |
$var_fragmenteur .= '<a class="frag_precedent" href="'.$this->url.'&TransTab='.$stockagevar.
|
|
|
157 |
'pstart,'.$startPrev.'!'.$tableau['args'].'" title="'.$txt_precedent.'">'.
|
|
|
158 |
'<span>'.$txt_precedent.'</span>'.
|
|
|
159 |
'</a>'."\n";
|
|
|
160 |
}
|
|
|
161 |
// Fragmentation
|
|
|
162 |
$tmp_i = (1 + ( ($this->curr_grp) * ($this->max_fg_pages) ));
|
|
|
163 |
$j = 1;
|
|
|
164 |
while (($tmp_i <= $how_pages) && ($tmp_i <= (($this->max_fg_pages) * (($this->curr_grp) + 1)))) {
|
|
|
165 |
if ($current_page == $tmp_i) {
|
|
|
166 |
$var_fragmenteur .= '<span class="frag_page_courante">'.$tmp_i.'</span>'."\n";
|
|
|
167 |
} else {
|
|
|
168 |
$stockagevar = '';
|
|
|
169 |
|
|
|
170 |
$tmp_go = ($tmp_i - 1) * $how_bloc;
|
|
|
171 |
|
|
|
172 |
foreach($tableau as $tmp_stock_i => $value) {
|
|
|
173 |
if ($tmp_stock_i != 'args') {
|
|
|
174 |
if ($tmp_stock_i == 'pstart') {
|
|
|
175 |
$stockagevar .= 'pstart,'.$tmp_go.'!';
|
|
|
176 |
} else {
|
|
|
177 |
$stockagevar .= $tmp_stock_i.','.$value.'!';
|
|
|
178 |
}
|
|
|
179 |
}
|
|
|
180 |
}
|
|
|
181 |
$stockagevar = ereg_replace(' ', '{', $stockagevar);
|
|
|
182 |
$var_fragmenteur .= '<a class="frag_page_autre" href="'.$this->url.'&TransTab='.$stockagevar.$tableau['args'].'">'.
|
|
|
183 |
'<span>'.($tmp_i).'</span>'.
|
|
|
184 |
'</a>'."\n";
|
|
|
185 |
}
|
|
|
186 |
|
|
|
187 |
if (($tmp_i < $how_pages) && ($j < ($this->max_fg_pages))) {
|
|
|
188 |
$var_fragmenteur .= '<span class="frag_separateur">'.$this->separator.'</span>'."\n";
|
|
|
189 |
}
|
|
|
190 |
$tmp_i++;
|
|
|
191 |
$j++;
|
|
|
192 |
}
|
|
|
193 |
|
|
|
194 |
// Bouton pour resultats suivants
|
|
|
195 |
$var_fragmenteur .= ' ';
|
|
|
196 |
if ($tableau['pstart'] + $tableau['step'] < $tableau['pend']) {
|
|
|
197 |
$txt_suivant = $tableau['step'].' données suivantes';
|
|
|
198 |
$var_fragmenteur .= '<a class="frag_suivant" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.$startNext.'!'.$tableau['args'].'" title="'.$txt_suivant.'">'.
|
|
|
199 |
'<span>'.$txt_suivant.'</span>'.
|
|
|
200 |
'</a>'."\n";
|
|
|
201 |
}
|
|
|
202 |
|
|
|
203 |
// Bouton pour groupes de pages suivants
|
|
|
204 |
if ( $this->nb_grp > 1 && ($this->curr_grp < ($this->nb_grp - 1))) {
|
|
|
205 |
$txt_fin = ($this->max_fg_pages * $tableau['step']).' données suivantes';
|
|
|
206 |
$var_fragmenteur .= ' <a class="frag_fin" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.
|
|
|
207 |
((($this->curr_grp) + 1) * ($this->max_fg_pages) * $tableau['step']).'!'.$tableau['args'].'" title="'.$txt_fin.'">'.
|
|
|
208 |
'<span>'.$txt_fin.'</span>'.
|
|
|
209 |
'</a>'."\n";
|
|
|
210 |
}
|
|
|
211 |
|
|
|
212 |
return $var_fragmenteur;
|
|
|
213 |
}
|
|
|
214 |
}
|
|
|
215 |
|
|
|
216 |
/* +--Fin du code ---------------------------------------------------------------------------------------+
|
|
|
217 |
|
|
|
218 |
* $Log: FRAG_Fragmenteur.class.php,v $
|
|
|
219 |
* Revision 1.8 2005/03/08 11:25:48 jpm
|
|
|
220 |
* Remplacement d'id en class car le fragmenteur peut être afficher plusieurs fois dans la même page XHTML.
|
|
|
221 |
*
|
|
|
222 |
* Revision 1.7 2005/03/03 08:40:48 jpm
|
|
|
223 |
* Correction de gestion des guillemets.
|
|
|
224 |
*
|
|
|
225 |
* Revision 1.6 2005/02/24 18:32:08 jpm
|
|
|
226 |
* Correction : changement d'un id en class.
|
|
|
227 |
*
|
|
|
228 |
* Revision 1.5 2005/02/24 17:16:10 jpm
|
|
|
229 |
* Modif des noms des id.
|
|
|
230 |
*
|
|
|
231 |
* Revision 1.4 2005/02/23 17:28:35 jpm
|
|
|
232 |
* Suppression d'image dans le fragmenteur et remplacement par des styles css.
|
|
|
233 |
* Amélioration du code html.
|
|
|
234 |
*
|
|
|
235 |
* Revision 1.3 2004/09/11 19:07:57 jpm
|
|
|
236 |
* Mise en forme.
|
|
|
237 |
*
|
|
|
238 |
* Revision 1.1 2004/09/10 12:44:26 jpm
|
|
|
239 |
* Ajout des classes et fonctions du fragmenteur de page.
|
|
|
240 |
* Leur révision est nécessaire!
|
|
|
241 |
*
|
|
|
242 |
*
|
|
|
243 |
* +--Fin du code ----------------------------------------------------------------------------------------+
|
|
|
244 |
*/
|
|
|
245 |
?>
|