Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] template-Systeme & caching

Einklappen

Neue Werbung 2019

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

  • [Erledigt] template-Systeme & caching

    Hier mal einige Fragen:

    Caching:
    Ich habe in Verbindung mit guten Template-Systemen schon mehrfach von caching gehört, nun wollte ich fragen, wie man sowas selbst realisieren kann.
    Ist das einfach oder sehr kompliziert. Oder überhaupt notwendig?

    Template-System:
    Ich habe schon einige Template-Systeme angeschaut und mache versteh ich einfach nicht, andere sind zu umfangreich/ komplex, deshalb versuche ich evtl doch ein einfaches, eigenes zu proggen.
    Aber wie kann ich folgende Features realisieren?

    {DEFINITION} => DEFINITION (z.B. für Mulitlanguage)
    {$VARIABLE} => $VARIABLE (Um einfach den Inhalt einer Variable auszugeben)
    {IF ... ENDIF} oder {FOREACH} oder ähnliches => soll mehrere Zeilen ausgeben. z.B. für jede Navigationszeile eine Zeile im Template


    Mich würde das Prinzip für eine Umsetzung interessieren und am besten auch Tipps, wie ich das richtig mache und was ich beachten muss

  • #2
    Smarty erstellt aus seinen Template-Dateien richtige PHP-Datei, die dann anschließend wie alle anderen PHP-Files geparsed werden. Das ganze hört sich zwar simple an, ist es aber schon ein wenig komplexer.

    Für kleine Template-Engines ála KTemplate wird ein Caching allerdings nicht gebraucht.

    Kommentar


    • #3
      Hat kTemplate die von mir angesprochenen Features?
      Wären für eine größere Seite gedacht bzw. eine Seite die wachsen soll...
      Gibt es zu diesem auch eine gute (deutsche) Dokumentation?

      Und Caching wäre damit auch nicht leicht zu realisieren. Zumindest nicht für einen Frischling wie mich

      Kommentar


      • #4
        MIt dem caching hab ich mir das ungefähr so vorgestellt... (keine Ahung ob das so überhaupt funktionieren würde):

        $caching = true //wenn true, dann cache aktiv und entsprechende Funktionen ausführen
        caching_file () => Wenn eine Seite aktualisiert wurde, wird diese durch diese Funktion in eine Datei im "./cache"-Ordner geschrieben

        cache_read () => wenn die Seite aufgerufen wird und $cache = true, dann Cache nach der passenden Datei durchsuchen und (falls vorhanden) diese laden


        War jetzt nur mal so auf die schnelle. Dieses Beispiel würde wahrscheinlich mit fertig verarbeiteten Files funktionieren (also Cache-Dateien =>html)

        Hab das noch nicht probiert, hätte das aber evtl für teile der Seite so versucht (Boxen oder Navigation...)

        Kommentar


        • #5
          So, gleich noch ne Frage:
          Ich habe schonmla ein kleines Script mit einem einfachen Template geschrieben. Dort habe ich die Navigation per WHILE auf der DB gelesen und wollte diese dann auch im Template anzeigen lassen. Zu beginn wurde aber immer nur die letzte Zeile der Nav angezeigt, zumindest bis ich ob_start benutzt habe, ABER:

          Wie kann ich das anders/ besser lösen?

          WIe kann ich auch im Template eine einfache und schnellle Schleife einrichten?
          Und wie funktioniert das mit

          <-- BEGIN schleife -->
          <-- END schleife -->

          oder so ähnlich???
          Das kenn ich noch gar nicht...

          Kommentar


          • #6
            Wenn du ein Template System selber machen willst, fang doch mit den Grundlagen an und arbeite dich dann hoch. Beim Hausbau fängt man ja auch nicht mit dem Dach an und macht dann den Keller.

            1. Erstelle eine Datei als Template (einfaches HTML)
            2. Setze deine Markierungen für Start und Ende der Ersetzung
            3. Setze deine Platzhalter
            4. Schreibe eine PHP Datei welche das Template einliest, Ein Ersetzungsarray erstellt und dann die Datei parst und wieder ausspuckt

            --> Voila, einfaches Template fertig

            Jetzt kannst du darauf aufbauen.

            Am besten Googelst du zu ein paar einfachen Tutorials die dir bei den Grundlagen helfen, und sobald du das geprogt hasst, kannst du deine Specials einproggen.

            Alternative: Fertiges Template System nehmen und darauf verzichten alles auf Anhieb zu verstehn.

            Kommentar


            • #7
              Zitat von eBoy
              WIe kann ich auch im Template eine einfache und schnellle Schleife einrichten?
              Und wie funktioniert das mit

              <-- BEGIN schleife -->
              <-- END schleife -->

              oder so ähnlich???
              Das kenn ich noch gar nicht...
              das ist festgelegter syntax auf den dein template system anspringt. das musste
              ihm aber vorher einprogrammieren. das kann nicht sofort jedes system von
              vorn herein.

              Kommentar


              • #8
                Danke, das hilft mir weiter, ich dachte schon das wäre ein "normaler PHP-Befehl", den ich einfach nicht finde...
                Ich habe schonmal ein einfaches Template geproggt und auf dem will ich aufbauen. War nach einem Tutorial aus einem Buch, werde das aber evtl. abändern (falls ich das schaffe)

                Kommentar


                • #9
                  Wie macht man solche Syntaxe?

                  <-- Begin .....
                  <--- End ...

                  Würd mich interessieren.


                  Gruß Deus

                  Kommentar


                  • #10
                    > Wie macht man solche Syntaxe?

                    *g... Du definierst diese einfach für dich bzw. in deinem Team. Dann programmierst du einen 'Parser', der das Template von vorne bis hinten durchscannt und eben diese Befehle erkennt und entsprechend reagiert, also diese z.B. in PHP-Code übersetzt (besser: durch PHP-Code ersetzt, der dann in einem Cache gespeichert wird und später einfach via include etc. eingebunden wird) oder gleich verarbeitet.

                    Worauf der Parser wie reagieren soll, das liegt ja voll und ganz in deiner Hand - und so eben auch die Syntax deiner Template-Sprache.

                    Basti

                    Kommentar


                    • #11
                      bsp.:

                      Siteload und replace Routine class.template.php
                      PHP-Code:
                      class template {

                          
                      // einlesen der template dateien
                          
                      function &siteload($file){
                              if(
                      $fp = @fopen($file"r")) {
                                  
                      $tpl fread($fpfilesize($file));
                                  
                      fclose ($fp);
                                  return 
                      $tpl;
                              } else {
                                  
                      $tpl "Template konnte nicht geoeffnet werden ($file)";
                              }
                          }
                          
                          
                      // Replace Funktion
                          
                      function &replace($tpl$repla){
                              foreach(
                      $repla as $key => $elem){
                                  
                      $tpl str_replace("{".$key."}"$elem$tpl);
                              }
                              return 
                      $tpl;
                          } 
                      template Site index.tpl
                      Code:
                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
                      <head>
                      <title>Standart powered by SWBulletin</title>
                      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                      </head>
                      <body> 
                      <div id="master" align="center">
                        <div class="table">
                          {AUSGABE}
                        </div>
                      </div>
                      </body>
                      </html>

                      deine index.php
                      PHP-Code:
                      <?php
                      require_once('class.template.php');
                      // template einlesen
                      $tpl template::siteload('index.tpl');

                      // template replace funktion
                      echo template::replace($tpl, array(
                      "AUSGABE" => 'Hallo'));?>

                      fertig ist dein templatesystem
                      ( bei der größe ohne caching , aber ein guter einstieg )

                      mfg

                      Kommentar


                      • #12
                        Code:
                          function FillTemplate($inName, $inValues = array(), $CurrentTemplate, $inUnhandled = "comment") {
                            $theTemplateFile = './templates/' . $CurrentTemplate . $inName;
                              if ($theFile = fopen($theTemplateFile, 'r')) {
                                $theTemplate = fread($theFile, filesize($theTemplateFile));
                                fclose($theFile);
                              }
                            $theKeys = array_keys($inValues);
                            foreach ($theKeys as $theKey) {
                              // Alle Vorkommen des Schlüssels in dem Template suchen und ersetzen
                              $theTemplate = str_replace("\{$theKey}", $inValues[$theKey], $theTemplate);
                              }
                            if ('delete' == $inUnhandled) {
                              // restliche Schlüssel entfernen
                              $theTemplate = eregi_replace('{[^ }]*}', '', $theTemplate);
                              }
                            elseif ('comment' == $inUnhandled) {
                              // restliche Schlüssel kommentieren
                              $theTemplate = eregi_replace('{([^ }]*)}', '', $theTemplate);
                              }
                            return $theTemplate;
                          }
                        Das ist meine Template-Funktion, wie sie momentan besteht.
                        Das will ich jetzt noch in eine Klasse umbauen und die IF und FOREACH Funktionen einbauen.
                        Der Code ist nach einem Buch-Tutorial geschrieben und ich hab ihn so halbwegs verstanden. Kann ich auf diesen Code aufbauen?
                        Kann mir jemand mal posten, wie ich hier jetzt weitermachen soll?
                        Keine Ahnung wo/ wie ich jetzt meine IF-Funktion hier reinbasteln soll...

                        Kommentar


                        • #13
                          Okay, ich hab mir jetzt gedanken gemacht:
                          Ich will folgenden Code verwenden:
                          Code:
                          ...                          // Hier der Template-Bereich für if
                          Wäre das dann auch so umsetzbar? Bzw wie erreiche ich das, das die if-Bedingung richtig interpretiert wird?
                          Code:
                          ...                          // Hier der Template-Bereich für if
                          Oder wenn ich das in dieser Form schreiben würde:
                          Code:
                          
                          
                          Wie komm ich dann zu folgendem Ergebnis?
                          Code:
                          if ($test = true) 
                          {

                          Gleiches will ich auch für ELSE und FOREACH machen, wobei bei FOREACH die Daten (z.B. Nav-Zeilen) in arrays (SInd doch in diesem FOrmat: $variable['subvariable'] oder?) gespeichert werden sollen

                          Kommentar


                          • #14
                            Kann mir jemand sagen, wie ich das im Prinzip realisieren kann? Das würde mir für den Anfang ja schonmal reichen. Würde heut abend gerne daran weiterbasteln, aber ohne diesen Hinweis werd ich da wohl nichts machen können...

                            Kommentar


                            • #15
                              möglich ist es. wie du dazu kommst? intensives studium von regulären aus-
                              drücken würde ich dir ans herz legen, das definitiv, und zweitens auch mit
                              verzweigung bzw kopplungen von so geschichten.

                              Kommentar

                              Lädt...
                              X