Subversion Repositories Sites.tela-botanica.org

Rev

Rev 4 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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