Composants PHP : fonctions de pagination de listes



  Recherche :

Cette fonction permet l'affichage d'une série d'images permettant la pagination d'une liste longue.
Coordonnées complètes  
AJORNET
78190 Trappes
tél/fax : 01.30.66.64.32
port : 06.73.48.61.37
contact@ajornet.com

Objectifs

On ne peut pas afficher tous les résultats d'une requête SQL d'un seul coup, la page HTML résultante pourrait être trop longue. On va donc afficher les résultats par paquet de 10 par exemple et on va afficher des liens pour circuler de page en page. On va paginer la liste.

Cette fonction prépare l'affichage des images de navigation comme cet exemple :

[ 1 - 10 ][ 21 - 30 ][ 31 - 40 ][ 41 - 44 ]

Vous pouvez cliquez les images et modifier les valeurs :

$nbRow
$nbLigneParPage
$offset

Concepts, vocabulaire et paramètres

La fonction a besoin du nombre total d'occurences de la liste :$nbRow, du nombre d'éléments à afficher par page : $nbLigneParPage. Elle a besoin de l'offset, c'est à dire le nombre d'éléments précédents le premier de la page en cours, cela permet de ne pas rendre actif l'image correspondant à la page courante. Si la page a besoin d'une zone de query, il faut lui donner cette chaîne en paramètre, la fonction concaténera la valeur de l'offset pour chaque image.

Il faut modifier la constante donnant le chemin vers les images, les images doivent s'appeler (c'est modifiable à volonté) « puce_n » où n vaut 1, 2, 3 etc..

Voici la source

<?php
/*
 * Site : http://www.ajornet.com/
 * But  : Pagination de liste
 *
 * Copyright (c) 2001 Ajornet http://www.ajornet.com/
 * Auteur : Daniel Lucazeau mailto:daniel.lucazeau@ajornet.com
 *
 * $Id: pagination.php,v 1.0 2001-07-20 20:34:56+02 lucazeau_daniel Exp lucazeau_daniel $
 *
 */

function paginerTableau $nbRow$nbLigneParPage$offset$zoneQuery="") {
    
// Les images ont pour nom puce_1.gif etc..
    // constantes
    
$cheminVersImg "../srcPhp/";    // chemin d'accès vers les images


    // Nombre de pages accessibles
    
$nbCol ceil$nbRow /$nbLigneParPage);
    
// Si il y a une query on prépare la fin de cette zone
    
if ( !empty( $zoneQuery))
        
$zoneQuery .= '&';
    if ( 
$nbCol >1) {
        
// il faut plus d'1 page pour afficher la liste complètement
        // Mise en place de la pagination
        
$tabPagin '<table border="0" align="center"><tr>';
        
// Init de qqs variables de positionnement
        
$finRow=0;
        
$isLeft true;
        for ( 
$i=1$i<=$nbCol$i++) {
            
$tabPagin .= '<td>';
            echo 
$debRow + ( $i 1) * $nbLigneParPage;
            echo 
"<br>";
            
$finRow $debRow $nbLigneParPage 1;
            
$finRow = ($finRow $nbRow $nbRow $finRow);
            echo 
$offset;
            echo 
"<br>";
            if ( 
$debRow == $offset+1) {
                
$isLeft false;
                
$tabPagin .= "<img src='${cheminVersImg}b_center.gif' border='0' width='21' height='22'>";
            } else {
                
$tabPagin .= sprintf"<a href='%s?%soffset=%d'><img src='${cheminVersImg}puce_%d.gif' border='0' width='21' height='22' alt='[ %d - %d ]'></a>"basename$PHP_SELF), $zoneQuery$debRow-1$i$debRow$finRow);
            }
            
$tabPagin .= '</td>';
        }
        
// on termine la table
        
$tabPagin .= '</tr></table>';
        return 
$tabPagin;
    } else {
        
// Il n'y a qu'une seule page
        
return "";
    }
}
?>

On peut l'adapter pour qu'elle affiche des numéros comme ceci [ 1 à 10 ] etc.. Dans l'exemple ci-dessus, ce sont les valeurs de l'attribut ALT de chaque image.

Télécharger le code de la fonction


mise à jour du 05.02.2008
Site hébergé sur un serveur dédié de I-P-T