Génération du code html pour un tableau (hérite de la classe nd_template)

0/5 (7 avis)

Vue 5 779 fois - Téléchargée 248 fois

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 mai 2008 à 18:22
# public function __construct($array){
# $this->template = new ND_Template();

pourquoi tu ne fais pas : parent::__construct(); ?
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
6 mai 2008 à 19:29
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)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 mai 2008 à 19:37
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...
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
6 mai 2008 à 23:07
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
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
7 mai 2008 à 10:45
j'ai pris note, et j'ai refais la classe. Je remets en place le zip, le fonctionnement ne change pas.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.