Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
734 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Affichage de tout un bloc dans un template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage de tout un bloc dans un template

n°1109481
karinou
Posté le 06-06-2005 à 12:02:30  profilanswer
 

Bonjour, je suis en train de réaliser un site Internet en PHP et je suis en train d'essayer la méthode des templates.
 
Un petit tour d'horizon de ce que j'ai réaliser pour l'instant.
J'ai récuperer une classe template.inc sur le net :

Code :
  1. <?php
  2. /*
  3. * Session Management for PHP3
  4. *
  5. * (C) Copyright 1999-2000 NetUSE GmbH
  6. *                    Kristian Koehntopp
  7. *
  8. * $Id: template.inc,v 1.5 2000/07/12 18:22:35 kk Exp $
  9. *
  10. */
  11. class Template {
  12.   var $classname = "Template";
  13.   /* if set, echo assignments */
  14.   var $debug     = false;
  15.   /* $file[handle] = "filename"; */
  16.   var $file  = array();
  17.   /* relative filenames are relative to this pathname */
  18.   var $root   = "";
  19.   /* $varkeys[key] = "key"; $varvals[key] = "value"; */
  20.   var $varkeys = array();
  21.   var $varvals = array();
  22.   /* "remove"  => remove undefined variables
  23.    * "comment" => replace undefined variables with comments
  24.    * "keep"    => keep undefined variables
  25.    */
  26.   var $unknowns = "remove";
  27.   /* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
  28.   var $halt_on_error  = "yes";
  29.   /* last error message is retained here */
  30.   var $last_error     = "";
  31.   /***************************************************************************/
  32.   /* public: Constructor.
  33.    * root:     template directory.
  34.    * unknowns: how to handle unknown variables.
  35.    */
  36.   function Template($root = ".", $unknowns = "remove" ) {
  37.     $this->set_root($root);
  38.     $this->set_unknowns($unknowns);
  39.   }
  40.   /* public: setroot(pathname $root)
  41.    * root:   new template directory.
  42.    */
  43.   function set_root($root) {
  44.     if (!is_dir($root)) {
  45.       $this->halt("set_root: $root is not a directory." );
  46.       return false;
  47.     }
  48.     $this->root = $root;
  49.     return true;
  50.   }
  51.   /* public: set_unknowns(enum $unknowns)
  52.    * unknowns: "remove", "comment", "keep"
  53.    *
  54.    */
  55.   function set_unknowns($unknowns = "keep" ) {
  56.     $this->unknowns = $unknowns;
  57.   }
  58.   /* public: set_file(array $filelist)
  59.    * filelist: array of handle, filename pairs.
  60.    *
  61.    * public: set_file(string $handle, string $filename)
  62.    * handle: handle for a filename,
  63.    * filename: name of template file
  64.    */
  65.   function set_file($handle, $filename = "" ) {
  66.     if (!is_array($handle)) {
  67.       if ($filename == "" ) {
  68.         $this->halt("set_file: For handle $handle filename is empty." );
  69.         return false;
  70.       }
  71.       $this->file[$handle] = $this->filename($filename);
  72.     } else {
  73.       reset($handle);
  74.       while(list($h, $f) = each($handle)) {
  75.         $this->file[$h] = $this->filename($f);
  76.       }
  77.     }
  78.   }
  79.   /* public: set_block(string $parent, string $handle, string $name = "" )
  80.    * extract the template $handle from $parent,
  81.    * place variable {$name} instead.
  82.    */
  83.   function set_block($parent, $handle, $name = "" ) {
  84.     if (!$this->loadfile($parent)) {
  85.       $this->halt("subst: unable to load $parent." );
  86.       return false;
  87.     }
  88.     if ($name == "" )
  89.       $name = $handle;
  90.     $str = $this->get_var($parent);
  91.     //$reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
  92.     $reg = "/<!--\s+BEGIN $handle\s+-->(.*)<!--\s+END $handle\s+-->/sm";
  93.     preg_match_all($reg, $str, $m);
  94.     $str = preg_replace($reg, "{" . "$name}", $str);
  95.     $this->set_var($handle, $m[1][0]);
  96.     $this->set_var($parent, $str);
  97.   }
  98.   /* public: set_var(array $values)
  99.    * values: array of variable name, value pairs.
  100.    *
  101.    * public: set_var(string $varname, string $value)
  102.    * varname: name of a variable that is to be defined
  103.    * value:   value of that variable
  104.    */
  105.   function set_var($varname, $value = "" ) {
  106.     if (!is_array($varname)) {
  107.       if (!empty($varname))
  108.         if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
  109.         $this->varkeys[$varname] = "/".$this->varname($varname)."/";
  110.         $this->varvals[$varname] = $value;
  111.     } else {
  112.       reset($varname);
  113.       while(list($k, $v) = each($varname)) {
  114.         if (!empty($k))
  115.           if ($this->debug) print "array: set *$k* to *$v*<br>\n";
  116.           $this->varkeys[$k] = "/".$this->varname($k)."/";
  117.           $this->varvals[$k] = $v;
  118.       }
  119.     }
  120.   }
  121.   /* public: subst(string $handle)
  122.    * handle: handle of template where variables are to be substituted.
  123.    */
  124.   function subst($handle) {
  125.     if (!$this->loadfile($handle)) {
  126.       $this->halt("subst: unable to load $handle." );
  127.       return false;
  128.     }
  129.     $str = $this->get_var($handle);
  130.     $str = @preg_replace($this->varkeys, $this->varvals, $str);
  131.     return $str;
  132.   }
  133.   /* public: psubst(string $handle)
  134.    * handle: handle of template where variables are to be substituted.
  135.    */
  136.   function psubst($handle) {
  137.     print $this->subst($handle);
  138.     return false;
  139.   }
  140.   /* public: parse(string $target, string $handle, boolean append)
  141.    * public: parse(string $target, array  $handle, boolean append)
  142.    * target: handle of variable to generate
  143.    * handle: handle of template to substitute
  144.    * append: append to target handle
  145.    */
  146.   function parse($target, $handle, $append = false) {
  147.     if (!is_array($handle)) {
  148.       $str = $this->subst($handle);
  149.       if ($append) {
  150.         $this->set_var($target, $this->get_var($target) . $str);
  151.       } else {
  152.         $this->set_var($target, $str);
  153.       }
  154.     } else {
  155.       reset($handle);
  156.       while(list($i, $h) = each($handle)) {
  157.         $str = $this->subst($h);
  158.         $this->set_var($target, $str);
  159.       }
  160.     }
  161.     return $str;
  162.   }
  163.   function pparse($target, $handle, $append = false) {
  164.     print $this->parse($target, $handle, $append);
  165.     return false;
  166.   }
  167.   /* public: get_vars()
  168.    */
  169.   function get_vars() {
  170.     reset($this->varkeys);
  171.     while(list($k, $v) = each($this->varkeys)) {
  172.       $result[$k] = $this->varvals[$k];
  173.     }
  174.     return $result;
  175.   }
  176.   /* public: get_var(string varname)
  177.    * varname: name of variable.
  178.    *
  179.    * public: get_var(array varname)
  180.    * varname: array of variable names
  181.    */
  182.   function get_var($varname) {
  183.     if (!is_array($varname)) {
  184.       return $this->varvals[$varname];
  185.     } else {
  186.       reset($varname);
  187.       while(list($k, $v) = each($varname)) {
  188.         $result[$k] = $this->varvals[$k];
  189.       }
  190.       return $result;
  191.     }
  192.   }
  193.   /* public: get_undefined($handle)
  194.    * handle: handle of a template.
  195.    */
  196.   function get_undefined($handle) {
  197.     if (!$this->loadfile($handle)) {
  198.       $this->halt("get_undefined: unable to load $handle." );
  199.       return false;
  200.     }
  201.     preg_match_all("/\{([^}]+)\}/", $this->get_var($handle), $m);
  202.     $m = $m[1];
  203.     if (!is_array($m))
  204.       return false;
  205.     reset($m);
  206.     while(list($k, $v) = each($m)) {
  207.       if (!isset($this->varkeys[$v]))
  208.         $result[$v] = $v;
  209.     }
  210.     if (count($result))
  211.       return $result;
  212.     else
  213.       return false;
  214.   }
  215.   /* public: finish(string $str)
  216.    * str: string to finish.
  217.    */
  218.   function finish($str) {
  219.     switch ($this->unknowns) {
  220.       case "keep":
  221.       break;
  222.       case "remove":
  223.         $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
  224. $str = preg_replace("#<!-- BEGIN (.*?) -->(.*?)<!-- END (.*?) -->#", "", $str);
  225.       break;
  226.       case "comment":
  227.         $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
  228. $str = preg_replace("#<!-- BEGIN (.*?) -->(.*?)<!-- END (.*?) -->#", "", $str);
  229.       break;
  230.     }
  231.     return $str;
  232.   }
  233.   /* public: p(string $varname)
  234.    * varname: name of variable to print.
  235.    */
  236.   function p($varname) {
  237.     print $this->finish($this->get_var($varname));
  238.   }
  239.   function get($varname) {
  240.     return $this->finish($this->get_var($varname));
  241.   }
  242.   /***************************************************************************/
  243.   /* private: filename($filename)
  244.    * filename: name to be completed.
  245.    */
  246.   function filename($filename) {
  247.     if (substr($filename, 0, 1) != "/" ) {
  248.       $filename = $this->root."/".$filename;
  249.     }
  250.     if (!file_exists($filename))
  251.       $this->halt("filename: file $filename does not exist." );
  252.     return $filename;
  253.   }
  254.   /* private: varname($varname)
  255.    * varname: name of a replacement variable to be protected.
  256.    */
  257.   function varname($varname) {
  258.     return preg_quote("{".$varname."}" );
  259.   }
  260.   /* private: loadfile(string $handle)
  261.    * handle:  load file defined by handle, if it is not loaded yet.
  262.    */
  263.   function loadfile($handle) {
  264.     if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
  265.       return true;
  266.     if (!isset($this->file[$handle])) {
  267.       $this->halt("loadfile: $handle is not a valid handle." );
  268.       return false;
  269.     }
  270.     $filename = $this->file[$handle];
  271.     $str = implode("", @file($filename));
  272.     if (empty($str)) {
  273.       $this->halt("loadfile: While loading $handle, $filename does not exist or is empty." );
  274.       return false;
  275.     }
  276.     $this->set_var($handle, $str);
  277.     return true;
  278.   }
  279.   /***************************************************************************/
  280.   /* public: halt(string $msg)
  281.    * msg:    error message to show.
  282.    */
  283.   function halt($msg) {
  284.     $this->last_error = $msg;
  285.     if ($this->halt_on_error != "no" )
  286.       $this->haltmsg($msg);
  287.     if ($this->halt_on_error == "yes" )
  288.       die("<b>Halted.</b>" );
  289.     return false;
  290.   }
  291.   /* public, override: haltmsg($msg)
  292.    * msg: error message to show.
  293.    */
  294.   function haltmsg($msg) {
  295.     printf("<b>Template Error:</b> %s<br>\n", $msg);
  296.   }
  297. }
  298. ?>


 
J'ai ensuite intégrer dans un fichier template.html un espace reservé pour mes informations :

Code :
  1. <div id="centre">
  2.     {centre}
  3. </div>


 
J'ai ensuite créer un script php avec le contenu à mettre dans cet espace

Code :
  1. <?
  2. include(dirname(__FILE__).'/contenu/include/connexion.php');
  3. // Assignation du bloc simple {NBRFRUITS} par sa valeur
  4. $template->set_var("centre", $contenu);
  5. // Traitement de la page entière
  6. $template->parse("parse", "index" );
  7. // Suppression des blocs simples sans valeur ou boucles non utilisés (ici aucun)
  8. // Affichage de la page
  9. $template->p("parse" );
  10. ?>


 
Mon probleme est que je ne sais pas comment intégrer tout le contenu que je souhaite afficé dans une meme variable que j'ai appellé ici $contenu. Je ne sais pas vraiment comment je dois procéder!!
 
Si mon probleme n'est pas clair, n'hesitez pas a m'en faire la remarque
 
Merci par avance, Karine

mood
Publicité
Posté le 06-06-2005 à 12:02:30  profilanswer
 

n°1109779
Djebel1
Nul professionnel
Posté le 06-06-2005 à 15:07:51  profilanswer
 

excuse moi j'y connais rien en template, donc dsl si ma réponse est à coté de la plaque, mais ce que tu demandes c'est comment mettre plusieurs données dans une seule variable? genre comme dans un tableau à plusieurs dimensions?
enfin je me dis que j'ai rien du comprendre sinon ca serait trop simple :D

n°1110206
plainsofpa​in
Pingouino's lover
Posté le 06-06-2005 à 19:38:08  profilanswer
 

a chaque fois que tu veux ajouter quelquechose a $contenu tu fais $contenu .= "ta chaine a ajouter".  
 
C'est ca qui t'embete ?


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
n°1110212
ritzle
Posté le 06-06-2005 à 19:42:16  profilanswer
 

c'est quoi des templates ?

n°1110214
plainsofpa​in
Pingouino's lover
Posté le 06-06-2005 à 19:43:17  profilanswer
 

Ritzle > cherches dans google, et tu trouveras :p


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
n°1110223
ritzle
Posté le 06-06-2005 à 19:49:48  profilanswer
 

merci, tu as répondu à toutes mes questions :wahoo:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Affichage de tout un bloc dans un template

 

Sujets relatifs
Affichage date[C] widget GTK/GNOME pour affichage de courbes
rajouter un bouton dans un template phpbbProblème d'affichage dans un CRichEdit
[JAVA] Pb d'affichage...Problème d'affichage des images sur un forum phpBB
Problème struct et affichage en colonneswing, pbm setVisible et affichage
Affichage sous IE 5.5Probleme d'affichage d'un CString
Plus de sujets relatifs à : Affichage de tout un bloc dans un template


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR