|
blog actif depuis 641 jours.
retours d'expériences, codes sources, réflexions, humeurs... d'un webmaster |
|
|
Sun 27 Sep ![]() Voici une classe pour l'affichage de listes à partir de résultats de requêtes sur une base de données. Elle permet notamment : - le tri par colonne - la pagination Le contenu des cellules est entièrement paramétrable : vous pouvez afficher plusieurs champs dans une même cellule et vous pouvez utiliser des fonctions complexes pour générer le contenu d'une cellule. Enfin, la liste est mise en forme entièrement par CSS. Voici donc un exemple d'utilisation de la classe : l'affichage de la liste des départements de France à partir d'infos contenus dans une table 'departements'. La requête exécutée est la suivante : SELECT SQL_CALC_FOUND_ROWS code_departement, nom_departement, nom_chef_lieu, nombre_arrondissements, nombre_communes FROM departements Instantiation et paramètres de la classe : $obj_liste = new classe_liste(); Passage des données à la classe Le premier traitement consiste à transformer le résultat de la requête en un tableau exploitable par la classe, grâce à la fonction PHP mysql_fetch_array(). Le tableau ainsi créé est passé à la classe : $obj_liste->setDatas($datas); Ajout des colonnes On ajoute les colonnes une à une à l'aide de la méthode addColonne, qui reçoit comme arguments : le nom du champ, le libellé de l'entête de colonne (<th>) et un troisieme argument optionnel qui est le contenu des cellules (<td>) de chaque ligne de résultat pour cette colonne : - contenu formaté - si ce dernier n'est pas précisé, la cellule contiendra le résultat de la requête - s'il est vide, la cellule sera vide ainsi pour afficher simplement les 4 colonnes nom_departement, nom_chef_lieu, nombre_arrondissements et nombre_communes : $obj_liste->addColonne("nom_departement","Département");![]() Maintenant, on va ajouter le numéro de département et un lien sur le nom du département vers la page wikipedia correspondante sur la colonne nom_departement : $obj_liste->addColonne("nom_departement","Département","[code_departement] - <a href="http://fr.wikipedia.org/wiki/[nom_departement]_(département)" target="_blank">[nom_departement]</a>");Le troisième argument contient le format de la chaine à retourner. Les valeurs dynamiques remplaceront les champs placés entre crochets. ainsi [nom_departement] sera remplacé à chaque ligne par le résultat de la requête correspondant. ![]() Ajout de contenu Vous pouvez ajouter du contenu à votre colonne à l'aide de la methode $obj_liste->addContenu(); Traitement du contenu à l'aide de fonctions complexes Pour ajouter du contenu, utilisez la méthode addContenuFonction(), qui reçoit 2 arguments : le nom de la colonne et la fonction à passer, avec ses arguments. Par exemple, j'ajoute une colonne blason avec l'image correspondante (le nom de l'image étant de la forme "nom_du_departement.png"). Cette colonne ne doit pas être triée. Un traitement est nécessaire pour récupérer le nom de l'image à partie du nom du département (suppression des accents, remplacement des "-", " " et ' par "_", ...). Je crée donc un fonction que j'appelle getBlason(nom_departement) qui s'occupe de ce traitement. Dans la classe liste, cela se traduit par : $obj_liste->addColonne("blason","Blason","");![]() Mise en forme Le tableau est entièrement mis en forme par du CSS. Les différents éléments de la liste sont accessibles par leur id, construit à partir du nom de colonne. Ainsi, l'entête de la colonne 'nom_département' est nommé th_nom_departement. Tri et pagination L'affichage de la navigation se fait par la méthode suivante : $obj_liste->afficheNavig(); Le tri se fait en cliquant sur les entêtes de colonnes. Les paramètres de tri sont mis en session, dans le tableau $_SESSION['classe liste'](pareil pour les éléments de pagination) : [classe_liste] => Array Ces valeurs sont donc à prendre en compte dans la construction de la requête SQL. Pour télécharger la classe et le code source de l'exemple, rendez vous sur l'espace téléchargement
CommentairesC'est fait : 29/09/2009
Merci beaucoup, très bonne utilisation de la fonction SQL_CALC_FOUND_ROWS, le côté serveur vous dit merci infiniement. 01/10/2009
Tout simplement MAGNIFIQUE !!! 07/10/2009
Salut, 25/11/2009 bien vu mrbinr, très intéressant cet article. 25/11/2009
Bonjour , 1* je vous remercie infiniment pour le code ;c'est magnifique . 20/01/2010 Bonjour aaa. 21/01/2010
Bonjour, 27/01/2010 Bonjour robertjul 27/01/2010
Bonjour, 01/02/2010 1 - oui, en passant par la méthode addContenuFonction : tu crées une fonction qui retourne le champ si ta condition est vérifiée dans cette fonction, sinon un espace 02/02/2010
Bonjour, 02/02/2010
Bonjour, 10/03/2010 Bonjour Carquois 10/03/2010
salut et merci pour ton code. juste une petite précision, est-ce que systèmatiquement le nom de la première colonne ne permet pas de faire un tri, etc, sur elle (comme le fait blason). Deuxièmement, j'ai un décalage entre les TH et les colonnes est-ce normal? merci 17/03/2010 Bonjour Wad 17/03/2010
Merci. Excellente la classe, c'est pile ce qui me fallait, le seule petit problème que j'ai c'est au niveau validation W3C mais je vais m'en sortir. Sinon tu souhaites que je laisse ton nom dans le code? 17/03/2010
Ajouter un commentaire |
Webmaster depuis maintenant presque 10 ans, j'ai créé ce blog pour publier mes retours d'expérience et parler du Web et du développement Web en général, mais aussi de plein d'autres choses...
![]()
![]()
|
Ce code fonctionne à merveille, Merci !
Une idée pour paramétrer l'affichage par rapport au tableau : au dessus , en dessous ou les deux ?
29/09/2009