begin process at 2008 07 20 22:40:12
1 213 497 membres
398 nouveaux aujourd'hui
14 167 membres club

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é: 1 703 / 62

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 ;
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

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
  • 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

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS