[Funktion] Template System

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

  • [Funktion] Template System

    Hallo zusammen =)

    Ich kenne mich eigentlich gar nicht mit PHP aus, möchte jedoch ein Template System haben.

    Ich möchte, das wenn ich in z. B. in der index.php {head} schreibe, dann soll die datei head.tpl aus dem ordner templates ausgegeben werden.

    Ist dies möglich?

    Wenn das Script nicht schwer ist, könnte mir das schnell jemand machen?

  • #2
    Re: [Funktion] Template System

    Ich möchte, das wenn ich in z. B. in der index.php {head} schreibe, dann soll die datei head.tpl aus dem ordner templates ausgegeben werden.
    Warum willst du das? PHP reicht völlig aus.

    Vielleicht ist ja Smarty was für dich!

    Kommentar


    • #3
      Auf Smarty wurde ich schon hingewiesen, aber das ist mir zu kompliziert.

      Ich möchte das damit mein Scrip übersichtlicher wird, und dieses ganze include weg ist.

      Kommentar


      • #4
        Ich möchte das damit mein Scrip übersichtlicher wird, und dieses ganze include weg ist.
        Versuch mal folgendes:

        PHP-Code:
        <?php

        /**
         * hier deine Programmlogik
         * /
        $tite = 'meine Webseite';


        /**
         * jetzt nur noch ausgaben...
         */
        include 'header.php';

        ?>

          <h1><?=$title?></h1>

        ...

        Kommentar


        • #5
          Ich will ja keine Variablen sondern ganze Dateien ausgeben.

          Kommentar


          • #6
            Ich wüsste keinen Grund dafür, aber wenn du das bevorzugst, dann wirst du um eine (in deinem Fall fertige) Template-Klasse nicht herum kommen. Im netz gibts viele.

            Ich verschieb den Thread mal nach Gesuche.
            EDIT:
            könnte mir das schnell jemand machen?
            vielleicht besser nach Projekthilfe. *move*

            Kommentar


            • #7
              class.Template.php
              PHP-Code:
              // Klasse initialisieren

              class template
              {
                 var 
              $path// Pfad zur Template Datei
                 
              var $content;  // Inhalt des Templates

                 
              function template($file)
                 {
                    
              $this->path $file;
                 }

                 
              // Template Datei öffnen
                 
              function read_template()
                 {
                    
              $file = @fopen($this->path"r");
                    while(!
              feof($file))
                    {
                       
              $temp fgets($file4096);
                       
              $this->content .= $temp;
                    }
                 }

                 
              // Platzhalter ersetzen
                 
              function replace($title$value)
                 {
                    
              // Alle {TITLE} durch VALUE ersetzen
                    
              $this->content str_replace("{" $title "}"$value$this->content);
                 }

                 
              // Fertige Datei ausgeben
                 
              function echo_template()
                 {
                    return 
              $this->content;
                 }

              PHP-Code:
              // Edit Start
              // include ("config.inc.php"); falsch *schäm*
              include ("class.Template.php");
              // Edit Ende

              $template_index = new template("head.html");
              $template_index->read_template();
              $template_index->replace("title""HTML-Titel");

              $index $template_index->echo_template();
              echo 
              $index
              head.html
              Code:
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
              <html>
              <head>
              <title>{title}</title>
              </head>
              <body>
              SO ok?? das wäre ein template system .. das GANZ klein gehalten ist.

              gruß
              uzu
              Zuletzt geändert von UzumakiNaruto; 18.05.2008, 01:03.
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                @uzu, das ersetzt aber auch nur einen simplen Text und nicht eine komplette Datei. Da müsste dann schon sowas her:

                PHP-Code:
                include 'config.inc.php';

                $tpl_header = new template('head.html');
                $tpl_header->read_template();
                $tpl_header->replace('title''Titel der Seite');

                $tpl_main = new template('homepage.html');
                $tpl_main->read_template();
                $tpl_main->replace('head',$tpl_header->echo_template());

                echo 
                $tpl_main->echo_template(); 
                Die ReadTemplate() Methode würde ich übrigens entweder vom Konstruktor aufrufen lassen. Spart wenigstens eine Zeile.

                @threadstarter:
                Das bedeutet: Für jedes einzelne "includen" benötigst du drei Zeilen zusätzlichen Code. Zudem musst du auch noch auf die eigentlich ganz selbstverständlichen Vorteile und Möglichkeiten eines includes verzichten.

                Wozu soll das Gut sein?

                Also, ich möchte jetzt nicht erneut das für und wieder von Template-Engines diskutieren. IMHO kann PHP das vollkommen ausreichend in seinem Standardumfang. Wer tatsächlich Funktionen braucht, die so nicht möglich sind, soll etwas entsprechendes einsetzen. Ein Beispiel ist ja nun gezeigt.
                Zuletzt geändert von TobiaZ; 17.05.2008, 19:39.

                Kommentar


                • #9
                  Kann man das so machen das ich das nicht jedes mal neu machen muss?

                  Kommentar


                  • #10
                    Original geschrieben von Raph
                    Kann man das so machen das ich das nicht jedes mal neu machen muss?
                    Definiere nicht jedes mal neu machen muss? Was nicht jedes mal neu machen muss?

                    Du kannst den Code in eine zentrale include-Datei auslagern. Klasse, dann bist du wieder da, wo du mit
                    PHP-Code:
                    include header.php
                    auch gewesen wärst.

                    Kommentar


                    • #11
                      Also
                      Ich möchte ja einfach nur schrieben

                      {php}

                      und dann soll die datei php.tpl aus dem ordner templates ausgelesen werden.

                      ohne das ich jedes mal irgendwas schreiben muss...

                      Kommentar


                      • #12
                        Geht nicht.

                        Die kürzeste Form ist
                        PHP-Code:
                        <?=file_get_contents('header.tpl')?>
                        Noch besser natürlich mit include:
                        PHP-Code:
                        <?=include 'header.tpl' ?>
                        weil du dann im Template (dann sicherheitshalber als .php gespeichert) auch noch Variablen verwenden kann.

                        Hatte ich aber auch alles schon mal vorgeschlagen.

                        Kommentar


                        • #13
                          aber wbb macht das doch auch so

                          Kommentar


                          • #14
                            Ich habe jetzt z.B.
                            PHP-Code:
                            function get_template($template) {
                                return 
                            str_replace("\"","\\\"",implode("",file("templates/".$template.".tpl")));

                            Ausgegeben wird ein Template dann mit:
                            PHP-Code:
                            eval ("\$beispiel = \"".get_template(beispiel)."\";");
                            echo 
                            $beispiel
                            Und ich will halt, das ich statt dem
                            PHP-Code:
                            eval ("\$beispiel = \"".get_template(beispiel)."\";");
                            echo 
                            $beispiel
                            einfach nur noch {beispiel} schreiben muss.



                            EDIT: Sry für Doppelpost

                            Kommentar


                            • #15
                              Original geschrieben von Raph
                              aber wbb macht das doch auch so
                              Dann guck dir mal den Quelltext an und vergleiche. Da wird das sicher nicht aus heiterem Himmel ersetzt.

                              Und ich will halt, das ich statt dem
                              PHP:
                              eval ("\$beispiel = \"".get_template(beispiel)."\";");
                              echo $beispiel;
                              einfach nur noch {beispiel} schreiben muss.
                              Dann musst du die Logik, die in den zwei Zeilen steckt (zugegeben, da steckt nicht viel Logik drin) halt an andere Stelle auslagern..

                              Aber irgendwo musst du die Info, dass "{bla}" durch "xyz" ersetzt werden soll, schon hinterlegen. Woher soll PHP sonst wissen, was zu tun ist. Erwarte keine Wunder.

                              Kommentar

                              Lädt...
                              X