template ausgabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • template ausgabe

    Hi ich habe mal angefangen mich mit templates zu befassen und habe da meiner meinung eine einfache klasse gefunden.

    Ich versuche nun ein altes cms so umzushcreiben das ich code und design getrennt habe. leider kann ich das menu nicht abrufen funktioniert irgendwie nicht.

    kann sich das mal wer anschauen bitte:

    die template klasse:

    PHP-Code:
    <?php
    /*
     *
     *
     * (C) Copyright 1999-2000 NetUSE GmbH
     *                    Kristian Koehntopp
     *
     * $Id: template.inc,v 1.5 2000/07/12 18:22:35 kk Exp $
     *
     */ 

    class Template {
      var 
    $classname "Template";

      
    /* if set, echo assignments */
      
    var $debug     false;

      
    /* $file[handle] = "filename"; */
      
    var $file  = array();

      
    /* relative filenames are relative to this pathname */
      
    var $root   "";

      
    /* $varkeys[key] = "key"; $varvals[key] = "value"; */
      
    var $varkeys = array();
      var 
    $varvals = array();

      
    /* "remove"  => remove undefined variables
       * "comment" => replace undefined variables with comments
       * "keep"    => keep undefined variables
       */
      
    var $unknowns "remove";
      
      
    /* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
      
    var $halt_on_error  "yes";
      
      
    /* last error message is retained here */
      
    var $last_error     "";


      
    /***************************************************************************/
      /* public: Constructor.
       * root:     template directory.
       * unknowns: how to handle unknown variables.
       */
      
    function Template($root "."$unknowns "remove") {
        
    $this->set_root($root);
        
    $this->set_unknowns($unknowns);
      }

      
    /* public: setroot(pathname $root)
       * root:   new template directory.
       */  
      
    function set_root($root) {
        if (!
    is_dir($root)) {
          
    $this->halt("set_root: $root is not a directory.");
          return 
    false;
        }
        
        
    $this->root $root;
        return 
    true;
      }

      
    /* public: set_unknowns(enum $unknowns)
       * unknowns: "remove", "comment", "keep"
       *
       */
      
    function set_unknowns($unknowns "keep") {
        
    $this->unknowns $unknowns;
      }

      
    /* public: set_file(array $filelist)
       * filelist: array of handle, filename pairs.
       *
       * public: set_file(string $handle, string $filename)
       * handle: handle for a filename,
       * filename: name of template file
       */
      
    function set_file($handle$filename "") {
        if (!
    is_array($handle)) {
          if (
    $filename == "") {
            
    $this->halt("set_file: For handle $handle filename is empty.");
            return 
    false;
          }
          
    $this->file[$handle] = $this->filename($filename);
        } else {
          
    reset($handle);
          while(list(
    $h$f) = each($handle)) {
            
    $this->file[$h] = $this->filename($f);
          }
        }
      }

      
    /* public: set_block(string $parent, string $handle, string $name = "")
       * extract the template $handle from $parent, 
       * place variable {$name} instead.
       */
      
    function set_block($parent$handle$name "") {
        if (!
    $this->loadfile($parent)) {
          
    $this->halt("subst: unable to load $parent.");
          return 
    false;
        }
        if (
    $name == "")
          
    $name $handle;

        
    $str $this->get_var($parent);
        
    $reg "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+--
    >/sm"
    ;
        
    preg_match_all($reg$str$m);
        
    $str preg_replace($reg"{" "$name}"$str);
        
    $this->set_var($handle$m[1][0]);
        
    $this->set_var($parent$str);
      }
      
      
    /* public: set_var(array $values)
       * values: array of variable name, value pairs.
       *
       * public: set_var(string $varname, string $value)
       * varname: name of a variable that is to be defined
       * value:   value of that variable
       */
      
    function set_var($varname$value "") {
        if (!
    is_array($varname)) {
          if (!empty(
    $varname))
            if (
    $this->debug) print "scalar: set *$varname* to *$value*<br>\n";
            
    $this->varkeys[$varname] = "/".$this->varname($varname)."/";
            
    $this->varvals[$varname] = $value;
        } else {
          
    reset($varname);
          while(list(
    $k$v) = each($varname)) {
            if (!empty(
    $k))
              if (
    $this->debug) print "array: set *$k* to *$v*<br>\n";
              
    $this->varkeys[$k] = "/".$this->varname($k)."/";
              
    $this->varvals[$k] = $v;
          }
        }
      }

      
    /* public: subst(string $handle)
       * handle: handle of template where variables are to be substituted.
       */
      
    function subst($handle) {
        if (!
    $this->loadfile($handle)) {
          
    $this->halt("subst: unable to load $handle.");
          return 
    false;
        }

        
    $str $this->get_var($handle);
        
    $str = @preg_replace($this->varkeys$this->varvals$str);
        return 
    $str;
      }
      
      
    /* public: psubst(string $handle)
       * handle: handle of template where variables are to be substituted.
       */
      
    function psubst($handle) {
        print 
    $this->subst($handle);
        
        return 
    false;
      }

      
    /* public: parse(string $target, string $handle, boolean append)
       * public: parse(string $target, array  $handle, boolean append)
       * target: handle of variable to generate
       * handle: handle of template to substitute
       * append: append to target handle
       */
      
    function parse($target$handle$append false) {
        if (!
    is_array($handle)) {
          
    $str $this->subst($handle);
          if (
    $append) {
            
    $this->set_var($target$this->get_var($target) . $str);
          } else {
            
    $this->set_var($target$str);
          }
        } else {
          
    reset($handle);
          while(list(
    $i$h) = each($handle)) {
            
    $str $this->subst($h);
            
    $this->set_var($target$str);
          }
        }
        
        return 
    $str;
      }
      
      function 
    pparse($target$handle$append false) {
        print 
    $this->parse($target$handle$append);
        return 
    false;
      }
      
      
    /* public: get_vars()
       */
      
    function get_vars() {
        
    reset($this->varkeys);
        while(list(
    $k$v) = each($this->varkeys)) {
          
    $result[$k] = $this->varvals[$k];
        }
        
        return 
    $result;
      }
      
      
    /* public: get_var(string varname)
       * varname: name of variable.
       *
       * public: get_var(array varname)
       * varname: array of variable names
       */
      
    function get_var($varname) {
        if (!
    is_array($varname)) {
          return 
    $this->varvals[$varname];
        } else {
          
    reset($varname);
          while(list(
    $k$v) = each($varname)) {
            
    $result[$k] = $this->varvals[$k];
          }
          
          return 
    $result;
        }
      }
      
      
    /* public: get_undefined($handle)
       * handle: handle of a template.
       */
      
    function get_undefined($handle) {
        if (!
    $this->loadfile($handle)) {
          
    $this->halt("get_undefined: unable to load $handle.");
          return 
    false;
        }
        
        
    preg_match_all("/\{([^}]+)\}/"$this->get_var($handle), $m);
        
    $m $m[1];
        if (!
    is_array($m))
          return 
    false;

        
    reset($m);
        while(list(
    $k$v) = each($m)) {
          if (!isset(
    $this->varkeys[$v]))
            
    $result[$v] = $v;
        }
        
        if (
    count($result))
          return 
    $result;
        else
          return 
    false;
      }

      
    /* public: finish(string $str)
       * str: string to finish.
       */
      
    function finish($str) {
        switch (
    $this->unknowns) {
          case 
    "keep":
          break;
          
          case 
    "remove":
            
    $str preg_replace('/{[^ \t\r\n}]+}/'""$str);
          break;

          case 
    "comment":
            
    $str preg_replace('/{([^ \t\r\n}]+)}/'"<!-- Template $handle
    Variable \\1 undefined -->"
    $str);
          break;
        }
        
        return 
    $str;
      }

      
    /* public: p(string $varname)
       * varname: name of variable to print.
       */
      
    function p($varname) {
        print 
    $this->finish($this->get_var($varname));
      }

      function 
    get($varname) {
        return 
    $this->finish($this->get_var($varname));
      }
        
      
    /**********************************************************
    *****************/
      /* private: filename($filename)
       * filename: name to be completed.
       */
      
    function filename($filename) {
        if (
    substr($filename01) != "/") {
          
    $filename $this->root."/".$filename;
        }
        
        if (!
    file_exists($filename))
          
    $this->halt("filename: file $filename does not exist.");

        return 
    $filename;
      }
      
      
    /* private: varname($varname)
       * varname: name of a replacement variable to be protected.
       */
      
    function varname($varname) {
        return 
    preg_quote("{".$varname."}");
      }

      
    /* private: loadfile(string $handle)
       * handle:  load file defined by handle, if it is not loaded yet.
       */
      
    function loadfile($handle) {
        if (isset(
    $this->varkeys[$handle]) and !empty($this->varvals[$handle]))
          return 
    true;

        if (!isset(
    $this->file[$handle])) {
          
    $this->halt("loadfile: $handle is not a valid handle.");
          return 
    false;
        }
        
    $filename $this->file[$handle];

        
    $str implode("", @file($filename));
        if (empty(
    $str)) {
          
    $this->halt("loadfile: While loading $handle$filename does not exist or is empty.");
          return 
    false;
        }

        
    $this->set_var($handle$str);
        
        return 
    true;
      }

      
    /**********************************************************
    *****************/
      /* public: halt(string $msg)
       * msg:    error message to show.
       */
      
    function halt($msg) {
        
    $this->last_error $msg;
        
        if (
    $this->halt_on_error != "no")
          
    $this->haltmsg($msg);
        
        if (
    $this->halt_on_error == "yes")
          die(
    "<b>Halted.</b>");
        
        return 
    false;
      }
      
      
    /* public, override: haltmsg($msg)
       * msg: error message to show.
       */
      
    function haltmsg($msg) {
        
    printf("<b>Template Error:</b> %s<br>\n"$msg);
      }
    }
    ?>
    die menu php

    ...
    Zuletzt geändert von Roopa; 19.06.2005, 22:31.

  • #2
    ...
    PHP-Code:
    <?php
    include_once("inc/template.inc"// Template Klasse includen
    include_once("seite2.php");
    // Ausgabe des Menus
    $result mysql_query("SELECT * FROM menu ORDER BY 'sort' ASC");
     
    $menukrams = while($row mysql_fetch_array($result)){
     echo 
    "&middot; <a href=\"?op=controlX&m=$row[mid]&version=light\">$row[menu]</a><br>\n";
        };
                       

    $t = new template();      // Aufruf der Template Klasse
    $t ->set_file("Out""seite1.tpl");     // Das Template wird deklariert
    $t ->set_block("Out""menu""tBlock");  // Einem Template-Block einen 
    Namen geben

    {
        
    $t->set_var("menu",$menukrams);    // Den aktuellen Wert 
    des Arrays auf dem der Zeiger steht als Variable setzen
        $t
    ->parse("tBlock""menu"true);    // und die Variable in den Speicher 
    aufnehmen
    }

    //$t->set_var("template2",$inhaltTemplate2); ist erstmal uninteresant
    $t->parse("Output","Out");  // noch einmal zwischenparsen
    $t->p("Output");  // und endgültig ins Template schreiben
    ?>
    das template
    PHP-Code:
    <!-- BEGIN menu -->
      <
    tr>
        <
    td>{menu}</td>
      </
    tr>
    <!-- 
    END menu -->
      <
    tr>
        <
    td>{template2}</td>
      </
    tr
    Ich danke schonmal im voraus

    Greetz
    Zuletzt geändert von Roopa; 19.06.2005, 22:34.

    Kommentar


    • #3
      kann ich das menu nicht abrufen
      ist keine problembeschreibung. wie wär's mit einer lokalisierung des problems?

      Kommentar


      • #4
        er hat das Problem doch schon auf 2 randvolle Postings mit Quelltext eingeschränkt. Was willst du mehr? *rofl*

        Kommentar


        • #5
          Hab mir mal da ganze etwas angeschaut.

          PHP-Code:
          $menukrams = while($row mysql_fetch_array($result)){ 
          Ich bin mir da jetzt nicht ganz sicher, aber man kann denk ich keine while-Schleife einer Variable zuordnen. Wäre denk ich auch etwas sinnlos.
          Zuletzt geändert von progs; 20.06.2005, 10:20.
          Martin Bauer

          bauer-martin.com | spiele-romane.de | gaming2.net

          Kommentar


          • #6
            @Roopa, du "versuchst" in der while-schleife 2 mal eine Variable zu füllen.

            PHP-Code:
            $result mysql_query("SELECT `foo` FROM `bar`");
            while (
            $row mysql_fetch_array($result)) {
               print 
            $row["foo"];
            }
            # Richtig
            #*****************************************************
            $result mysql_query("SELECT * FROM menu ORDER BY 'sort' ASC");
            $menukrams = while($row mysql_fetch_array($result)){
               echo 
            "&middot; <a href=\"?op=controlX&m=$row[mid]";
               echo 
            "&version=light\">$row[menu]</a><br>\n";
            }
            # Falsch 

            Kommentar


            • #7
              Hallo,

              Also um mein Problem nochmals zu beschreiben.

              Ich habe eine dyn. Navigation, die funktionierte bisher ohne probleme mit misch code (php und html in einer datei über includes). Jetzt möchte ich das ganze aber auf templates umstellen.

              Ich kann die Menu punkte in der datenbank nicht auslesen.

              Der while Befehl funktioniert ohne der 2. variablen natürlich ohne template system aber wie muss ich das nun mit dem Link machen das er die schleife ausließt.

              @ Skaschy

              danke für deinen Ansatz aber ich denke print und echo werden hier wohl nicht benötigt weil ich das ganze ja nicht über die php datei selber sondern über das template ausgeben möchte. Und das ist mein problem

              Kommentar


              • #8
                danke für deinen Ansatz aber ich denke print und echo werden hier wohl nicht benötigt weil ich das ganze ja nicht über die php datei selber sondern über das template ausgeben möchte. Und das ist mein problem
                Ich denke print und echo waren nicht das, was er bemängelte...

                Kommentar


                • #9
                  sein beispiel hat auch ein print beinhaltet.

                  und sow ie iche s vorher hatte funktioniert es ja ohne templates als direkte ausgabe im php

                  Kommentar


                  • #10
                    @ Roopa

                    Kommentar


                    • #11
                      OffTopic:
                      mein scrollrad hat bei diesem post seinen geist aufgegebn
                      Die Milch bleibt ranzig!

                      Kommentar


                      • #12
                        super antworten echt, warum schreibt man in einem Forum ? Denke ist klar wenn man nicht weiter oder besser weis.

                        Wenn ich meine frage falsch formuliert habe dann kann man das doch schreiben denke ich.

                        Also mein problem ist einfach die ausgabe des links so das er funktioniert über das template sys.

                        Kommentar

                        Lädt...
                        X