New file |
0,0 → 1,245 |
<?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; |
$e = 'nb_grp: '.$this->nb_grp.'- curr_grp: '.$this->curr_grp; |
trigger_error($e, E_USER_WARNING); |
//echo $e; |
// 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 ----------------------------------------------------------------------------------------+ |
*/ |
?> |