Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*vim: set expandtab tabstop=4 shiftwidth=4: */// +------------------------------------------------------------------------------------------------------+// | PHP version 4.1 |// +------------------------------------------------------------------------------------------------------+// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |// +------------------------------------------------------------------------------------------------------+// | This library is free software; you can redistribute it and/or |// | modify it under the terms of the GNU Lesser General Public |// | License as published by the Free Software Foundation; either |// | version 2.1 of the License, or (at your option) any later version. |// | |// | This library is distributed in the hope that it will be useful, |// | but WITHOUT ANY WARRANTY; without even the implied warranty of |// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |// | Lesser General Public License for more details. |// | |// | You should have received a copy of the GNU Lesser General Public |// | License along with this library; if not, write to the Free Software |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |// +------------------------------------------------------------------------------------------------------+// CVS : $Id: FRAG_Fragmenteur.class.php,v 1.8 2005/03/08 11:25:48 jpm Exp $/*** API : fragmenteur.** Cette librairie contient la classe fragmenteur qui permet de créer* une série de chiffres pour naviguer de page en page lorsque le* résultat d'une recherche est trop long.* Une variable globale $TransTab est nécessaire d'où les fonctions :* - UnstoreTransTab()* - AffTxtNbRes()**@package API*@subpackage Framenteur//Auteur original :*@author Jean-Charles GRANGER <tela@vecteur.org>//Autres auteurs :*@author Alexandre GRANIER <alexandre@tela-botanica.org>*@author Jean-Pascal MILCENT <jpm@clapas.org>*@copyright Tela-Botanica 2000-2004*@version $Revision: 1.8 $ $Date: 2005/03/08 11:25:48 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTETE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+/*Mettre ici les inclusions de fichiers*/include_once 'FRAG_fragmenteur.fonct.php';// +------------------------------------------------------------------------------------------------------+// | CLASSES |// +------------------------------------------------------------------------------------------------------+/*Mettre ici la liste de fonctions.*//*** fragmenteur() - Classe pour séparer un résultat en plusieurs pages.** Permet de créer un système de navigation* de page de résultat en page de résultat.** @author Jean-Charles GRANGER <tela@vecteur.org>*/class fragmenteur {// Propriétésvar $separator;var $nb_pages;var $curr_page;var $max_fg_pages; // nombre maximum de numéros de pages qui doivent être affichéesvar $curr_grp; // groupe courrant de nombre de pagesvar $nb_grp; // nbre de groupes totalvar $url;// Constructeurfunction fragmenteur($caractere = ' - ', $nombre_p = 10, $url = null){$this->separator = $caractere;$this->max_fg_pages = $nombre_p;if (is_null($url)) {$this->url = $GLOBALS['_GEN_commun']['url']->geturl();} else {$this->url = $url;}}/*** fragmente() - Méthode qui fragmente des résultats.** Permet de fragmenter des résultats.* Le tableau des données à passer en paramêtre doit contenir a minima :* - $tableau['pstart'] : valeur du début de la page* - $tableau['step'] : valeur du pas (nombre d'items par pages)* - $tableau['pend']* Pour faire figurer des images sur les liens suivant, précédent, début et fin utiliser* des css.**@param array tableau qui contient les variables du fragmenteur.*@param int le nombre de résultat total.*@return string le xhtml permettant de naviguer dans les résultats.*/function fragmente($tableau, $nbr_total){$startPrev = $startNext = $tableau['pstart'];// Initialisation des variables$var_fragmenteur = '';$stockagevar = '';$how_bloc = $tableau['step'];$how_pages = ceil($nbr_total / $how_bloc);$current_page = ceil(($tableau['pstart'] / $how_bloc)) + 1;$this->nb_pages = $how_pages;$this->curr_page = $current_page;$this->nb_grp = ceil(($this->nb_pages) / ($this->max_fg_pages));$this->curr_grp = floor( ($tableau['pstart'] + (($this->max_fg_pages) * $tableau['step']) ) / (($this->max_fg_pages) * $tableau['step'])) - 1;// 1- Altération des données de tmpTab pour passer les paramètres de saut de page// 1-a- tmpTab de la page précédenteif ($startPrev > 0) {$startPrev = $startPrev - $tableau['step'];}// 1-b- tmpTab de la page suivante$startNext = $startNext + $tableau['step'];// Création des variables mises dans le tableau, pour les passer aux pages successivesif (empty($tableau['args'])) {$tableau['args'] = '';}foreach($tableau as $tmp_stock => $value) {if (($tmp_stock != 'args') && ($tmp_stock != 'pstart')) {$stockagevar = $stockagevar.$tmp_stock.','.$value.'!';}}// Ligne suivante désuette ??$stockagevar = ereg_replace(' ', '{', $stockagevar);// Bouton pour groupes de pages précédentif ((($this->nb_pages) > ($this->max_fg_pages)) && (($this->curr_page) > ($this->max_fg_pages))) {$txt_depart = ( ($this->max_fg_pages) * $tableau['step'] ).' données précédentes';$var_fragmenteur .= '<a class="frag_depart" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.((($this->curr_grp) - 1) * ($this->max_fg_pages) * $tableau['step']).'!'.$tableau['args'].'" title="'.$txt_depart.'" >'.'<span>'.$txt_depart.'</span>'.'</a>'."\n";}// Bouton pour resultats précédentif ($tableau['pstart'] > 0) {$txt_precedent = $tableau['step'].' données précédentes';$var_fragmenteur .= '<a class="frag_precedent" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.$startPrev.'!'.$tableau['args'].'" title="'.$txt_precedent.'">'.'<span>'.$txt_precedent.'</span>'.'</a>'."\n";}// Fragmentation$tmp_i = (1 + ( ($this->curr_grp) * ($this->max_fg_pages) ));$j = 1;while (($tmp_i <= $how_pages) && ($tmp_i <= (($this->max_fg_pages) * (($this->curr_grp) + 1)))) {if ($current_page == $tmp_i) {$var_fragmenteur .= '<span class="frag_page_courante">'.$tmp_i.'</span>'."\n";} else {$stockagevar = '';$tmp_go = ($tmp_i - 1) * $how_bloc;foreach($tableau as $tmp_stock_i => $value) {if ($tmp_stock_i != 'args') {if ($tmp_stock_i == 'pstart') {$stockagevar .= 'pstart,'.$tmp_go.'!';} else {$stockagevar .= $tmp_stock_i.','.$value.'!';}}}$stockagevar = ereg_replace(' ', '{', $stockagevar);$var_fragmenteur .= '<a class="frag_page_autre" href="'.$this->url.'&TransTab='.$stockagevar.$tableau['args'].'">'.'<span>'.($tmp_i).'</span>'.'</a>'."\n";}if (($tmp_i < $how_pages) && ($j < ($this->max_fg_pages))) {$var_fragmenteur .= '<span class="frag_separateur">'.$this->separator.'</span>'."\n";}$tmp_i++;$j++;}// Bouton pour resultats suivants$var_fragmenteur .= ' ';if ($tableau['pstart'] + $tableau['step'] < $tableau['pend']) {$txt_suivant = $tableau['step'].' données suivantes';$var_fragmenteur .= '<a class="frag_suivant" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.$startNext.'!'.$tableau['args'].'" title="'.$txt_suivant.'">'.'<span>'.$txt_suivant.'</span>'.'</a>'."\n";}// Bouton pour groupes de pages suivantsif ( ( ($this->nb_grp) > 1) && (($this->curr_grp) < (($this->nb_grp) - 1) ) ) {$txt_fin = (($this->max_fg_pages) * $tableau['step']).' données suivantes';$var_fragmenteur .= ' <a class="frag_fin" href="'.$this->url.'&TransTab='.$stockagevar.'pstart,'.((($this->curr_grp) + 1) * ($this->max_fg_pages) * $tableau['step']).'!'.$tableau['args'].'" title="'.$txt_fin.'">'.'<span>'.$txt_fin.'</span>'.'</a>'."\n";}return $var_fragmenteur;}}/* +--Fin du code ---------------------------------------------------------------------------------------+* $Log: FRAG_Fragmenteur.class.php,v $* Revision 1.8 2005/03/08 11:25:48 jpm* Remplacement d'id en class car le fragmenteur peut être afficher plusieurs fois dans la même page XHTML.** Revision 1.7 2005/03/03 08:40:48 jpm* Correction de gestion des guillemets.** Revision 1.6 2005/02/24 18:32:08 jpm* Correction : changement d'un id en class.** Revision 1.5 2005/02/24 17:16:10 jpm* Modif des noms des id.** Revision 1.4 2005/02/23 17:28:35 jpm* Suppression d'image dans le fragmenteur et remplacement par des styles css.* Amélioration du code html.** Revision 1.3 2004/09/11 19:07:57 jpm* Mise en forme.** Revision 1.1 2004/09/10 12:44:26 jpm* Ajout des classes et fonctions du fragmenteur de page.* Leur révision est nécessaire!*** +--Fin du code ----------------------------------------------------------------------------------------+*/?>