Rev 576 | 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.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és
var $separator;
var $nb_pages;
var $curr_page;
var $max_fg_pages; // nombre maximum de numéros de pages qui doivent être affichées
var $curr_grp; // groupe courrant de nombre de pages
var $nb_grp; // nbre de groupes total
var $url;
// Constructeur
function 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édente
if ($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 successives
if (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édent
if ((($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édent
if ($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 suivants
if ( $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 ----------------------------------------------------------------------------------------+
*/
?>