Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GÉNÉRATION DU CODE HTML POUR UN TABLEAU (HÉRITE DE LA CLASSE ND_TEMPLATE)


Information sur la source

Catégorie :Divers Classé sous : POO, oriente objet, PHP5 Niveau : Débutant Date de création : 06/05/2008 Date de mise à jour : 07/05/2008 10:51:13 Vu / téléchargé: 2 744 / 83

Note :
Aucune note

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Extension du moteur de template (ND_Template) afin de générer le code HTML d'un tableau bi-dimensionnel.
Cela génère le header du tableau avec la valeurs des clés.

Nécessite forcement la classe ND_Template.

Cette classe peut etre pratique pour afficher un retour de BDD sous forme de tableau ou tout autre tableau associatif

exemple :



 

Source

  • <?php
  • require_once 'ND/Template.php';
  • class ND_Template_HTML_Table extends ND_Template{
  • private $array ;
  • private $header ;
  • private $caption ;
  • private $attributes ;
  • private $footer ;
  • private $tbody ;
  • private $nbCol = 0 ;
  • const TABLE_PATTERN = '
  • <table #attributs#>
  • #caption#
  • #thead#
  • #tbody#
  • #tfoot#
  • </table>';
  • public function __construct($array){
  • $this->setArray($array);
  • $this->_content = self::TABLE_PATTERN;
  • }
  • public function setArray($array){
  • if ( ! is_array($array) ){
  • throw new Exception('$array must be an array');
  • }
  • $this->array = $array ;
  • return $this;
  • }
  • private function prepare(){
  • if ( count($this->array) > 0 ){
  • $keys = array_keys($this->array[0]);
  • $sKey = '';
  • foreach($keys as $key){
  • $sKey .= '<th>'.$key.'</th>';
  • $this->nbCol++;
  • }
  • $this->header = '<thead><tr>'.$sKey.'</tr></thead>';
  • $sTbody = '';
  • foreach( $this->array as $key=>$elt){
  • $sTr = '';
  • foreach($elt as $item){
  • $sTr .= '<td>'.$item.'</td>';
  • }
  • $sTbody .= '<tr>'.$sTr.'</tr>';
  • }
  • $this->tbody = '<tbody>'.$sTbody.'</tbody>';
  • }
  • }
  • public function setFooter($value){
  • if ( ! empty($value) ){
  • $this->footer = '<tfoot><tr><td colspan="'.$this->nbCol.'">'.$value.'</td></tr></tfoot>';
  • }
  • return $this;
  • }
  • public function setAttributs($array){
  • if ( ! is_array($array) ){
  • throw new Exception('$item must be an array');
  • }else{
  • foreach( $array as $key=>$value){
  • $this->attributes = ' '.$key.'="'.$value.'" ';
  • }
  • }
  • return $this;
  • }
  • public function __toString(){
  • $this->prepare();
  • $this->addValue('attributs', $this->attributes)
  • ->addValue('caption', $this->caption)
  • ->addValue('thead', $this->header)
  • ->addValue('tbody', $this->tbody)
  • ->addValue('tfoot', $this->footer);
  • return parent::__toString();
  • }
  • public function setCaption($value){
  • if ( false === empty($value) ){
  • $this->caption = '<caption>'.$value.'</caption>';
  • }
  • return $this;
  • }
  • }
  • // Exemple d'utilisation
  • // on considère qu'une connexion a été établie et que
  • $oDB->execute('Select id, login, mail, pass From User'); // on execute une requete
  • $array = $oDB->result->toArray(); // renvoi le jeu de resultat sous forme de tableau associatif (cf Zend_Table du Zend Framework)
  • $tableauHTML = new ND_Template_HTML_Table($array);
  • echo $tableauHTML ;
<?php

require_once 'ND/Template.php';

class ND_Template_HTML_Table extends ND_Template{
    private $array      ;
    private $header     ;
    private $caption    ;
    private $attributes ;
    private $footer     ;
    private $tbody      ;   
    private $nbCol = 0  ;
    const TABLE_PATTERN = '
    <table #attributs#>
       #caption#
       #thead#
       #tbody#
       #tfoot#
    </table>';
    
    public function __construct($array){        
        $this->setArray($array);    
        $this->_content = self::TABLE_PATTERN;   
    }
    
    public function setArray($array){
        if ( ! is_array($array) ){
            throw new Exception('$array must be an array');
        }        
        $this->array    = $array   ;
        return $this;
    }
    
    private function prepare(){        		        

        if ( count($this->array) > 0 ){
	        $keys = array_keys($this->array[0]);
	        $sKey = '';
	        foreach($keys as $key){
	            $sKey .= '<th>'.$key.'</th>';
	            $this->nbCol++;
	        }
	        $this->header = '<thead><tr>'.$sKey.'</tr></thead>';
	        $sTbody = '';
	        foreach( $this->array as $key=>$elt){
	            $sTr = '';
	            foreach($elt as $item){
	                $sTr .= '<td>'.$item.'</td>';
	            }
	            $sTbody .= '<tr>'.$sTr.'</tr>';
	        }
	        $this->tbody = '<tbody>'.$sTbody.'</tbody>';
        }
    }

    public function setFooter($value){
        if ( ! empty($value) ){
            $this->footer = '<tfoot><tr><td colspan="'.$this->nbCol.'">'.$value.'</td></tr></tfoot>';
        }
        return $this;
    }
    
    public function setAttributs($array){
        if ( ! is_array($array) ){
            throw new Exception('$item must be an array');
        }else{
            foreach( $array as $key=>$value){
                $this->attributes = ' '.$key.'="'.$value.'" ';
            }
        }
        return $this;
    }
    
    public function __toString(){
        $this->prepare();
        $this->addValue('attributs', $this->attributes)
             ->addValue('caption',   $this->caption)
             ->addValue('thead',     $this->header)
             ->addValue('tbody',     $this->tbody)
             ->addValue('tfoot',     $this->footer);
        return parent::__toString();                               
    }
    
    public function setCaption($value){
        if ( false === empty($value) ){
            $this->caption = '<caption>'.$value.'</caption>';
        }
        return $this;
    }
    
}

// Exemple d'utilisation
// on considère qu'une connexion a été établie et que 
$oDB->execute('Select id, login, mail, pass From User'); // on execute une requete
$array = $oDB->result->toArray(); // renvoi le jeu de resultat sous forme de tableau associatif (cf Zend_Table du Zend Framework)
$tableauHTML = new ND_Template_HTML_Table($array);
echo $tableauHTML ;

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

06 mai 2008 19:37:11 :
J'ai virée le extends car ca ne sert a rien sur le source mais pas dans le zip.
07 mai 2008 10:51:13 :
Refonte du code car mon implementation était totalement erronée, j'espere que celle ci est meilleure

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 06/05/2008 18:22:57

#  public function __construct($array){
# $this->template = new ND_Template();

pourquoi tu ne fais pas : parent::__construct(); ?

signaler à un administrateur
Commentaire de garfield90 le 06/05/2008 19:29:13

Je ne l'ai pas fait pour plusieurs raisons.
- je n'y ai pas pensé
- en essayant ca ne marche pas, ce qui est normale en l'état.

Par contre, ca me pose un questionnement sur ma classe de base
- Est ce que j'ai fait une erreur de conception (possible et/ou probable) ?


Je confirme je n'ai pas besoin d'etendre ma classe ND_Template car ce n'est pas un héritage (/me va se faire flageller)

signaler à un administrateur
Commentaire de coucou747 le 06/05/2008 19:37:08

bah en fait, tu n'utilise pas l'heritage la... pourtant, ta class en herite... donc oui t'as une erreur de conception (ou d'utilisation de l'heritage je sais pas...)

apres, perso, j'ai tout lu en diagonale, donc je ne sais pas si tu devrais faire un heritage (propre, je veux dire, et l'utiliser ensuite), ou faire autrement, j'en ai aucune idee...

signaler à un administrateur
Commentaire de codefalse le 06/05/2008 23:07:41 administrateur CS

J'ai aussi regardé en diagonale et personnellement je ferai de l'héritage avec ta classe mere qui ne fait que le travail de base, et tes classes filles tel Array qui viendraient complémenter la classe de base.
Comme ca tout le monde est libre d'implémenter sa propre classe pour generer un rendu depuis un tableau par exemple.

Apres ca ne regarde que moi :p

signaler à un administrateur
Commentaire de garfield90 le 07/05/2008 10:45:12

j'ai pris note, et j'ai refais la classe. Je remets en place le zip, le fonctionnement ne change pas.

signaler à un administrateur
Commentaire de codefalse le 07/05/2008 10:59:49 administrateur CS

Arf c'est con de ne pas avoir l'ancienne version (je ne dit pas ca contre toi @Garfield90 mais contre CS) car comme cela on pouvais voir l'amélioration !

En fait l'un des maitres mot de la poo, c'est d'éviter d'écrire le même code plusieurs fois. Un peu comme à la sauce linux, un objet fait qu'une chose, mais elle le fait bien ! :)

Tu viens du 90 ? Car moi c'est le cas :p

signaler à un administrateur
Commentaire de garfield90 le 07/05/2008 11:28:22

nop aucun rapport, simplement un diminutif de mon adresse mail de l'époque (ou 90 gars avait pris le nom garfield :'( )

concernant les modifs faites :

- remise en place de l'héritage
- suppression d'un niveau inutile (il n'y a plus la propriété template)
- $this->template est devenu directement $this
- le contenu de la methode __construct dans une méthode privée prepare, ce qui permet d'éviter de réinstancié l'objet si on en a de nouveau besoin.

Ca doit être a peu près tout

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

differnec entre php 4 et php5 [ par hardelgylls ] Bonjourpetite question :j'ai passer un oral et l'examinateur m'a demandé quel était la différence entre php4 et php5. et la gros blanc, est ce que qqu Doc PHP5 sniff sniff [ par slhuilli ] Bonjour, Bonsoir,Je suis a la recherche d'un PDF qui recenserait les mots-clefs + explications (bref un bouquin complet) sur PHP 5 qui parait-il est Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci Pb passage PHP4 -> PHP5 [ par Galmiza ] Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea Cohabitation PHP4 PHP5 sur même serveur ! [ par Zacland ] Ce n'est pas une question, mais je me doute que certaines personnes veulent essayer de faire cohabiter 2 versions de PHP sur un même serveur Apache... Un caractére se trouve t'il dans ma chaîne... [ par juki_webmaster ] Bonsoir,Je travaille depuis 14h cette apres-midi sur une fonction alternative d'une fonction connu et disponible uniquement sur php5, je fait cette fo PHP5 en PHP3 [ par el shaddai ] J'ai développé une partie de site en PHP5. MAlheureusement , chargé chez FREE, ils n'utilisent que PHP3. Y a t-il une manip simple pour qur du PHP5 pa PHP5 et MySQL 4.1.7 [ par TMT ] J'ai installé PHP5 et MySQL sur mon Windows XP avec IIS. J'ai bien activé le module php_mysql dans le fichier php.ini Là mon problème est qu-à chaque php4 vers php5 [ par aurelielaugraud ] Bonjour, Je suis passée de php4 à php5 pour utiliser la librairie graphique GD. Seulement, un programme que j'avais précédemment faire refuse de fonct Modification d'un script pour conformité avec php4 et/ou php5 [ par christobal ] Bonjour, depuis plusieurs ann&#233;es j'utilise le m&#234;me script pour mes sites.Maitenant avec les derrnieres version de PHP4 et PHP5 ce script ne


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.