Blame | 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_Session.class.php,v 1.10 2005/03/08 11:25:48 jpm Exp $/*** API : fragmenteur utilisant les sessions.** 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.* Cette extension du fragmenteur utilise les sessions.**@package API*@subpackage Framenteur//Auteur original :*@author Alexandre GRANIER <alexandre@tela-botanica.org>//Autres auteurs :*@author Jean-Pascal MILCENT <jpm@clapas.org>*@copyright Tela-Botanica 2000-2004*@version $Revision: 1.10 $ $Date: 2005/03/08 11:25:48 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | ENTETE du PROGRAMME |// +------------------------------------------------------------------------------------------------------+/** Inclusion de la classe Fragmenteur principale. */include_once 'FRAG_Fragmenteur.class.php';// +------------------------------------------------------------------------------------------------------+// | CLASSES |// +------------------------------------------------------------------------------------------------------+/*** Classe pour séparer un résultat en plusieurs page.** Basé sur la classe fragmenteur mais utilise les variables* de session.** @author Alexandre Granier <alexandre@tela-botanica.org>*/class fragmenteur_session{/*** Contient le séparateur des chiffres** @var string* @access private*/var $separator;var $nb_pages;var $curr_page;/*** nombre maximum de numéros de pages qui doivent être affichées** @var integer* @access private*/var $max_fg_pages;/*** groupe courant de nombre de pages* par défaut 10** @var integer* @access private*/var $curr_grp;/*** nbre de groupes total** @var integer* @access private*/var $nb_grp;/***L'url de départ** @var string* @access private*/var $url ;/***Le tableau des variables de l'url et des formulaire** @var array* @access private*/var $_variables ;/***Le nombre de résultat par page** @var integer* @access private*/var $_pas ;/***Le début de l'ensemble de résultat** @var integer* @access private*/var $_debut ;/***Le nombre total de résultat** @var integer* @access private*/var $_nb_total ;function fragmenteur_session ($caractere = ' - ', $nombre_p = 10){// On va utiliser toutes les variables de l'url et des formulaires disponiblesglobal $HTTP_POST_VARS, $_GET, $HTTP_GET_VARS, $GS_GLOBAL ;$this->_variables = array_merge($HTTP_GET_VARS, $HTTP_POST_VARS, $_GET) ;// On récupère toutes les variables de sessionsif (!isset($_SESSION['fragment'])) {// Il n'y a pas de variable de session, on en crée une et on y met $this->_variables$_SESSION['fragment'] = $this->_variables;} else {// On récupère la variable et on l'affecte à $this->_variables// en laissant cependant les valeurs existant déjà dans $this->_variables// mise à jour de la variable de session$tableau_temp = $_SESSION['fragment'];foreach ($tableau_temp as $key=>$value) {if (!isset ($this->_variables[$key]) || ($this->_variables[$key] == '')) {if (!isset($HTTP_POST_VARS[$key])) {$this->_variables[$key] = $tableau_temp[$key] ;} else {$this->_variables[$key] = '';}}}$_SESSION['fragment'] = $this->_variables;}$this->separator = $caractere;$this->max_fg_pages = $nombre_p;// on initialise $this->_debut avec soit 0, soit la valeur de $this->_variables['debut']if (isset($this->_variables['debut']) && $this->_variables['debut'] != '') {$this->_debut = $this->_variables['debut'] ;} else {$this->_debut = 0;}// on initialise $this->_pas avec soit 20, soit la valeur de $this->_variables['T_REPONSE']if (isset ($this->_variables['T_REPONSE']) && $this->_variables['T_REPONSE'] != '') {$this->_pas = $this->_variables['T_REPONSE'];} else {$this->_pas = 20;}}/*** 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.** @access public* @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($nbr_total){$startPrev = $startNext = $this->_debut;// Initialisation des variables$var_fragmenteur = '';$this->_nb_total = $nbr_total ;$how_bloc = $this->_pas ;$how_pages = ceil($nbr_total / $how_bloc);$this->curr_page = ceil(($this->_debut / $how_bloc))+1;$this->nb_pages = $how_pages;$this->nb_grp = ceil(($this->nb_pages)/($this->max_fg_pages));$this->curr_grp = floor(($this->_debut + ($this->max_fg_pages * $this->_pas))/(($this->max_fg_pages)*$this->_pas))-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 - $this->_pas ;// 1-b- tmpTab de la page suivante$startNext = $startNext + $this->_pas;// Bouton pour groupes de pages précédentif ((($this->nb_pages) > ($this->max_fg_pages))&&(($this->curr_page) > ($this->max_fg_pages))) {$pstart = ((($this->curr_grp)-1)*($this->max_fg_pages)*$this->_pas);$txt_depart = (($this->max_fg_pages)*$this->_pas).' données précédentes';$var_fragmenteur .= '<a class="frag_depart" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_depart.'" >'.'<span>'.$txt_depart.'</span>'.'</a>'."\n";}// Bouton pour resultats précédentif ($this->_debut > 0) {$pstart = $startPrev;$txt_precedent = $this->_pas.' données précédentes';$var_fragmenteur .= '<a class="frag_precedent" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_precedent.'" >'.'<span>'.$txt_precedent.'</span>'.'</a>'."\n";}// Fragmentation en page$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))) && $how_pages != 1) {if ($this->curr_page == $tmp_i) {$var_fragmenteur .= '<span class="frag_page_courante">'.$tmp_i.'</span>'."\n";} else {$tmp_go = ($tmp_i - 1) * $how_bloc;$pstart = $tmp_go ;$var_fragmenteur .= '<a class="frag_page_autre" href="'.$this->url.'&debut='.$pstart.'">'.'<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 suivantif ($this->_debut + $this->_pas < $nbr_total) {$pstart = $startNext ;$var_fragmenteur .= ' ';$txt_suivant = $this->_pas.' données suivantes';$var_fragmenteur .= '<a class="frag_suivant" href="'.$this->url.'&debut='.$pstart.'" 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))) {$pstart = ((($this->curr_grp)+1)*($this->max_fg_pages)*$this->_pas) ;$txt_fin = (($this->max_fg_pages)*$this->_pas).' données suivantes';$var_fragmenteur .= '<a class="frag_fin" href="'.$this->url.'&debut='.$pstart.'" title="'.$txt_fin.'" >'.'<span>'.$txt_fin.'</span>'.'</a>'."\n";}if ($var_fragmenteur == '') {$var_fragmenteur = ' ';}return $var_fragmenteur;}/*** Méthode setURL() -** @access public* @param url Chaine qui contient l'url de départ*/function setURL($url){$this->url = $url;}/** getVariable() Renvoie la valeur d'une variable de l'url ou d'un formulaire** @access public* @param string Nom de la variable* @return mixed La valeur de la variable ou la chaine vide*/function getVariable ($cle){if (isset($this->_variables[$cle])) {return $this->_variables[$cle];} else {return '';}}/** setVariable() Affecte une valeur à une variable** @param string clé* @param string valeur* @return void*/function setVariable ($cle, $valeur){$tableau = $_SESSION['fragment'];$tableau[$cle] = $valeur ;$_SESSION['fragment'] = $tableau;}/** fixerLePas() Permet d'indiquer le nombre de résultat souhaité par page** @param int le pas* @return void*/function fixerLePas ($pas){$this->_pas = $pas;}/** lireLePas() Permet d'obtenir le nombre de résultat souhaité par page** @return integer le pas*/function lireLePas (){return $this->_pas;}/** lireLeDebut() Permet d'obtenir le nombre du début du résultat** @return integer le début*/function lireLeDebut (){return $this->_debut;}/** fixerLeDebut() Permet d'indiquer le nombre du début du résultat** @return integer le début*/function fixerLeDebut ($debut){$this->_debut = $debut;}/** affNbRes() Affiche le nombre de résultat** Permet de créer un petit texte uniforme du type "il y a x resultats sur y"...* Possibilité de paramétrer un "modèle" pour afficher selon différentes mises* en forme.** @access public* @param int nombre d'items trouvés par la requête* @return string une phrase en HTML*/function affNbRes($nombre_total){$this->_nb_total = $nombre_total ;// init de $var_affiche$var_affiche = '';if ($this->_nb_total > 1) {$pluriel_loc = 's';} else {$pluriel_loc = '';}if ($this->_nb_total > 1) {$pluriel_tot = 's';} else {$pluriel_tot = '';}if ($this->_nb_total > 0) {$add_from = $this->_debut + 1;$tmp_num = $this->_debut + $this->_pas ;if ($tmp_num < $this->_nb_total) {$add_to = "$tmp_num";} else {$add_to = $this->_nb_total ;}}$var_affiche .= '<b>'.$this->_nb_total.'</b>'.' résultat'.$pluriel_loc."\n";if ($this->_nb_total > 0) {$var_affiche .= ' Affichage des données <b>'.$add_from.'</b> à <b>'.$add_to.'</b>.'."\n";}return $var_affiche;}}//Fin classe./* +--Fin du code ---------------------------------------------------------------------------------------+** $Log: FRAG_Fragmenteur_Session.class.php,v $* Revision 1.10 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.9 2005/03/03 08:40:48 jpm* Correction de gestion des guillemets.** Revision 1.8 2005/02/28 15:42:15 jpm* Initialisation d'une variable de session.** Revision 1.7 2005/02/24 18:32:08 jpm* Correction : changement d'un id en class.** Revision 1.6 2005/02/24 17:16:10 jpm* Modif des noms des id.** Revision 1.5 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.4 2005/02/22 19:32:45 jpm* Initialisation de variables.** Revision 1.3 2005/02/22 16:21:28 jpm* Mise à jour : utilisation des session, mise en forme et suppression d'appel de fichiers inutiles.** Revision 1.2 2004/09/11 19:12:38 jpm* Début mise en forme.*** +--Fin du code ----------------------------------------------------------------------------------------+*/?>