New file |
0,0 → 1,425 |
<?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 disponibles |
global $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 sessions |
if (!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édente |
if ($startPrev > 0) $startPrev = $startPrev - $this->_pas ; |
// 1-b- tmpTab de la page suivante |
$startNext = $startNext + $this->_pas; |
|
// Bouton pour groupes de pages précédent |
if ((($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édent |
if ($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 suivant |
if ($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 suivants |
if ((($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 ----------------------------------------------------------------------------------------+ |
*/ |
?> |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |