begin process at 2013 06 18 06:59:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

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

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


 Information sur la source

Note :
Aucune note
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é :4 535 / 124

Auteur : garfield90

Ecrire un message privé
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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip MOTEUR DE TEMPLATE PHP5
Source avec Zip FONCTION RECURSIVE DE RECHERCHE DE FICHIER SELON UNE EXTENSI...

 Sources de la même categorie

Source avec Zip Source avec une capture PHP INFOS SHOUTCAST par jules87
Source avec Zip Source avec une capture ESPACE MEMBRE VERSION 3 EN PHP 5 par JejeScript
Source avec Zip SAUVEGARDE ADRESSE IP VISITEUR par michael33512
FONCTION DE REDIRECTION par monpoke
Source avec Zip TCHAT PHP5, JAVASCRIPT->AJAX par JejeScript

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TODO LIST (AJAX/PHP5) par VinceMonkeyz
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
CLASS RECHERCHE PHP5 POO par mtrix000
CLASS AUTHENTIFICATION PHP5 POO par mtrix000
CLASS PAGINATION PHP5 POO par mtrix000

Commentaires et avis

Commentaire de coucou747 le 06/05/2008 18:22:57 administrateur CS

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

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

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)

Commentaire de coucou747 le 06/05/2008 19:37:08 administrateur CS

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

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

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.

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

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

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,342 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales