Affichage de tout un bloc dans un template

Affichage de tout un bloc dans un template - PHP - Programmation

Marsh Posté le 06-06-2005 à 12:02:30    

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

Reply

Marsh Posté le 06-06-2005 à 12:02:30   

Reply

Marsh Posté le 06-06-2005 à 15:07:51    

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

Reply

Marsh Posté le 06-06-2005 à 19:38:08    

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
Reply

Marsh Posté le 06-06-2005 à 19:42:16    

c'est quoi des templates ?

Reply

Marsh Posté le 06-06-2005 à 19:43:17    

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
Reply

Marsh Posté le 06-06-2005 à 19:49:48    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed