Klaus: Template per Include laden & global Vars

Hallo,
also mir ist eine Idee gekommen, wie man ein recht schnelle Template System schreiben könnte.

Wenn man das Template aufruft, wird überprüft ob es bereits eine Version davon im Cache-Ordner vorhanden ist.
Diese Version wird dann per include(); geladen und somit ausgegeben.

Falls diese Datei noch nicht vorhanden ist, wird das "Roh-Template" geladen, dort werden erst einmal die Design Platzhalter, sowie sonstige Platzhalter, ersetzen und die IF-Tags werden durch PHP-IF-Anweisungen ersetzt.

Das wird dann im Cache-Ordner gespeichert.

Der Vorteil daran wäre, dass falls die Datei im Cache vorhanden ist, dass die ganzen Platzhalter nicht überprüft und ersetzt werden müssen.

Denn hat man z.B. 10 Templates und 30 Platzhalter, so wären es 300 Ersetzungen-Durchläufe pro Seitenaufruf.

Danach müssten wieder die IF-Anweisungen gefunden, gesplittet und überprüft werden. Das würde im Cache alles entfallen, denn die Platzhalter haben ihren Wert bereits erhalten (falls sich dieser ändert, wird der Cache geleert) und die IF-Anweisungen würden dort als PHP-Tag (<?php if(...) ?>) stehen und müssten vorher nicht aufwendig gefunden und ersetzt werden.

Ein Problem gibt es jetzt bei den Variablen. Teileweise muss der User   die PHP-Varibalen ($variable) im Template speichern, z.B. eine Variable welche den Namen des Mitgliedes ausgibt.

Bisher wurden diese immer per eval(); durch den Wert ersetzt, da aber das Include innerhalb einer Funktion einer Klasse ist, müsste ich:
-Alle Variablen als global deklarieren, geht dies?
-Die $variable durch $GLOBALS['variable'] im Cache speichern lassen.

Gibt es Probleme bei $GLOBALS['variable'], oder andere Bedenken?

Die Variablen im Template sollen nur ausgegeben werden, aber nicht verändert werden, sofern der User das nicht selber vornimmt.

Grüße
Klaus

  1. Hallo Klaus,

    Wenn man das Template aufruft, wird überprüft ob es bereits eine Version davon im Cache-Ordner vorhanden ist.
    Diese Version wird dann per include(); geladen und somit ausgegeben.

    *räusper* - genau so macht das Smarty ...

    Ein Problem gibt es jetzt bei den Variablen.

    Wenn ich in ein Template {$frage} reinschreibe, macht Smarty nach dem Kompilieren den PHP-Code <?php echo $this->_tpl_vars['frage']; ?> daraus.

    Teileweise muss der User   die PHP-Varibalen ($variable) im Template speichern, z.B. eine Variable welche den Namen des Mitgliedes ausgibt.

    in ein Template gehören keine PHP-Variablen - alle Variablen die im Template stehen müssen vom PHP-Code der Template-Klasse zugewiesen werden die die dann einbaut.

    Grüße aus Nürnberg
    Tobias

    1. Hallo,

      in ein Template gehören keine PHP-Variablen - alle Variablen die im Template stehen müssen vom PHP-Code der Template-Klasse zugewiesen werden die die dann einbaut.

      Hmm das Problem ist, dann muss ich für jede Variable die der Admin angeben kann/soll, also (fast) alle Variable, die wärend des Scripts entstehen, extra in die Class hinzufügen muss?

      z.B:
      <?php
      $header = "Dies ist der Header";
      $template = new template;
      $template->load("beispiel");
      $template->var_ersetzen("header",$header);
      ?>

      Oder ist das bei Smarty irgendwie vereinfacht/automatisiert worden, dass sich die Class automatisch die Werte der Variablen (hier z.B. $header) aus dem Script lädt und dann als $this->_tpl_vars['header'] speichert?

      Grüße
      Klaus

      1. Hi,
        Wii mich ja nicht einmischen, aber warum das Rad zweimal erfinden?
        Smarty ist echt ein super Templatesystem, das man sogar selber erweitern kann und das auch in Verbindung mit PEAR super zu händeln ist, oder sehe ich das Falsch?

        Viele Grüsse aus USA
        Ludwig

        1. Hallo Ludwig,

          Wii mich ja nicht einmischen, aber warum das Rad zweimal erfinden?

          das habe ich mich im Thread weiter unten auch schon gefragt :-)

          Smarty ist echt ein super Templatesystem, das man sogar selber erweitern kann [...]

          vielleicht lässt sich Klaus ja noch überzeugen, dass es einfacher wäre ein fertiges Template-System zu verwenden statt selbst eines zu entwickeln.

          Grüße aus Nürnberg
          Tobias

          1. Hallo,

            vielleicht lässt sich Klaus ja noch überzeugen

            nein ich lasse mich nicht Überzeugen, evt. werde ich diese doch in späteren Scripts benutzen, aber zuerst möchte ich eine (kleine) Template-Engine selber programmieren, denn nur so kann man verschiedene Template-Klassen vergleichen und evt. auch auf den eigenen Zweck zuschneiden.
            Falls ich jetzt Smarty benutze, und nicht das Grundgerüst einer Template-Class verstehe, dann wird es auch schwerer, diese entsprechend anzupassen.

            Außerdem warum programmiert man ein Forum/Board, wenn es schon super Boards, wie z.B. phpBB, wBB oder vBB gibt?
            Und falls man sich wirklich in ein Projekt hängt, dann kann man zwar nicht sofort das gleiche Erreichen, aber man weiß man hat es selber gemacht und kann es entsprechend anpassen.
            Was ist z.B. mit dem wBB, dies ist *afaik* in einer Zeit entstanden, als das phpBB und vorallem das vBB sehr dominant waren. Dennoch konnte es sich durchsetzen, obwohl es von privat Personen entstanden ist.

            Und wenn man später sich bei einer Firma bewirbt, was hört sich dann besser an:
            Ich kann die Boards phpBB und wBB den Bedürfnissen der Anwender entsprechend anpassen.

            Oder:
            Ich habe das Board xyz von www.url.de programmiert, das Ziel des Projektes war ....

            P.S. Variablen von Scripts in die Class zu übergeben ist sinnvoll, allerdings auch recht aufwendig, wenn man ein Templatesystem in fertige Scripts integrieren möchte.

            Grüße
            Klaus

            1. hi,
              sogesehen hast du natürlich recht.
              Learning by doing

              Gruß Ludwig

      2. Hallo Klaus,

        Oder ist das bei Smarty irgendwie vereinfacht/automatisiert worden, dass sich die Class automatisch die Werte der Variablen (hier z.B. $header) aus dem Script lädt und dann als $this->_tpl_vars['header'] speichert?

        nein, man muss jede benötigte Variable mit $tmpl->assign('varname',$var); einzeln zuweisen - woher soll den Smarty die Variablen des Hauptprogrammes kennen? Das hat übrigends auch den Vorteil, dass die Variablen im Template völlig anders heißen können wie die im PHP-Code.

        Grüße aus Nürnberg
        Tobias