hotti: Smarty o.a. TemplateEngines

hi,

darf das Template php-code enthalten, bzw, läuft das auch über den Preprozessor? Z.B. sowas:

  
<!-- Template -->  
<h1>{$title}</h1>       <!-- smarty -->  
<p>  
<?php echo $message ?>  <!-- native php -->  
</p>  

Falls das nicht, gibt es in PHP Templatesysteme wo das können?

Hotti

  1. Tach!

    darf das Template php-code enthalten, bzw, läuft das auch über den Preprozessor?

    Das wäre eine sehr fragwürdige Vorgehensweise. PHP ist einerseits bereits selbst eine Template-Engine. Andererseits wurde Smarty unter anderem entworfen, um mit einer einfacheren Syntax dem HTML-Bearbeiter die Möglichkeit zum Einfügen der Daten in sein HTML-Konstrukt zu geben, ohne dass dieser PHP kennen muss. Wenn du also mischst, bringst du nur die Nachteile beider Systeme zusammen. Wenn du PHP-Code im Template verwenden kannst, warum nimmst du dann nicht durchgängig PHP-Code?

    dedlfix.

    1. hi,

      darf das Template php-code enthalten, bzw, läuft das auch über den Preprozessor?

      [..] Wenn du also mischst, bringst du nur die Nachteile beider Systeme zusammen.

      Mein Ziel ist es, die Vorteile zusammenzubringen ;)

      Wenn du PHP-Code im Template verwenden kannst, warum nimmst du dann nicht durchgängig PHP-Code?

      Warum nicht beides zusammen? Wo siehst Du darin die Nachteile?

      Hotti

      1. Tach!

        darf das Template php-code enthalten, bzw, läuft das auch über den Preprozessor?
        [..] Wenn du also mischst, bringst du nur die Nachteile beider Systeme zusammen.
        Mein Ziel ist es, die Vorteile zusammenzubringen ;)

        Definiere das was du als Vorteil ansiehst, beziehungsweise warum du überhaupt eine Template-Engine einsetzen möchtest.

        Wenn du PHP-Code im Template verwenden kannst, warum nimmst du dann nicht durchgängig PHP-Code?
        Warum nicht beides zusammen? Wo siehst Du darin die Nachteile?

        Die "reine" Lehre der Template-Engines sagt, dass PHP-Code nichts in der Ausgabe zu suchen hat. (Das mag man sehen, wie man will.) Trotzdem braucht es für die Ausgabe eine gewisse Portion Logik, zumindest Fallunterscheidungen und Wiederholungen. Oder man definiert Blöcke und steuert deren Anzeige außerhalb des Templates (à la PEARs HTML_Template_IT).

        Normalerweise will man diese strikte Trennung von Template und Geschäftslogik, wenn der Designer zwar HTML kann und nur noch ein bisschen Template-Engine-Syntax lernen soll. Wer die Grundzüge von PHP beherrscht, kann das bisschen für die Ausgabe benötigte PHP auch gleich ins Template einbauen. Es spricht nichts gegen eine Trennung von Verarbeitung und Ausgabe, es reicht meiner Meinung nach jedoch, diese auf logischer Ebene und nicht auf Code-Typen-Ebene zu vollziehen. Bestimmte Konstrukte, die in PHP zu lang zu tippen sind, kann man ja mit Helper-Funktionen abkürzen.

        Ich sehe keinen gesteigerten Sinn darin, sich zusätzlich Template-Syntax ans Bein zu binden und dann doch wieder direktes PHP zu verwenden. Was soll denn die Aufgabe dieses PHP-Blocks sein? Und warum kann diese nicht in die Geschäftslogik verlagert werden?

        Savant3 als eine PHP-Code verwendende Template-Engine. Das ist daselbe Prinzip, wie es auch das Zend Framework out-of-the-box für seine Views verwendet.

        dedlfix.

        1. hi,

          Ok, ich habe jetzt lange genug mit Smarty rumgemacht mit dem Ergebnis, dass ich es nicht einsetzen werde.

          Generell die Idee: Es soll die Möglichkeit geben, die Klasse und das Template zusammen in einer Datei zu haben. ob_funktionen() ermöglichen es, eine solche Datei mit include oder require einzubinden, die Klasse wird kompiliert und das Template liegt im Puffer, alles zusammen ein Aufwasch ;)

          Als Nebeneffekt wird auf diese Weise auch PHP-Code im Template geparst und kompiliert. Eine Klasseninstanz ist zu diesem Zeitpunkt noch nicht vorhanden. Bei Bedarf kann also hier bereits prozedural was gemacht werden, worum sich die Klasseninstanz dann nicht mehr kümmern muss.

          Danach kommt ein einheitlicher Prozess: Instanzerstellung, Templateprozess, letzterer muss auf den Puffer bzw. einen eigenen String anwendbar sein, was mit Smarty schonmal gar nicht geht (s. Frage untenstehend). Und erst zum Schluss, wenn keine Fehler aufgetreten sind, wird alles ausgegeben.

          Savant3 als eine PHP-Code verwendende Template-Engine. Das ist daselbe Prinzip, wie es auch das Zend Framework out-of-the-box für seine Views verwendet.

          Kann ich mit dieser Engine einen String als Template verwenden? Das ist die Anforderung: Ein von der Ausgabe unabhänger Templateprozess.

          Hotti

          1. Tach!

            Generell die Idee: Es soll die Möglichkeit geben, die Klasse und das Template zusammen in einer Datei zu haben.

            Warum brauchst du dann eine Template-Syntax, wenn derjenige, der am HTML arbeitet sowieso mit PHP in Berührung kommt? Nimm lieber gleich PHP als Template-Sprache.

            Savant3 als eine PHP-Code verwendende Template-Engine. Das ist daselbe Prinzip, wie es auch das Zend Framework out-of-the-box für seine Views verwendet.
            Kann ich mit dieser Engine einen String als Template verwenden? Das ist die Anforderung: Ein von der Ausgabe unabhänger Templateprozess.

            Keine Ahnung, schau es dir an. Es ist mir nur beim schnellen Suchen über den Weg gelaufen.

            dedlfix.

            1. hi,

              Generell die Idee: Es soll die Möglichkeit geben, die Klasse und das Template zusammen in einer Datei zu haben.

              Warum brauchst du dann eine Template-Syntax, wenn derjenige, der am HTML arbeitet sowieso mit PHP in Berührung kommt? Nimm lieber gleich PHP als Template-Sprache.

              Eben: Weil das Template aus einer abstrakten Quelle kommt. Das kann der Puffer sein, das kann eine x-beliebige Datei sein oder eine DB als Quelle. Die Default_Template_Beschaffungs_Methode() liest das Template aus dem OB. In der Klasse kann die Default_Template_Beschaffungs_Methode() überschrieben werden, so dass auch andere Quellen benutzt werden können.

              Keine Ahnung, schau es dir an. Es ist mir nur beim schnellen Suchen über den Weg gelaufen.

              Wahrscheinlich müssen wir länger suchen ;)

              Hotti

  2. Hallo,

    darf das Template php-code enthalten, [...]

    Ja, innerhalb von {php}...{/php}, siehe Doku - davon wird allerdings abgeraten.

    Gruß,
    Tobias

    1. hi,

      darf das Template php-code enthalten, [...]

      Ja, innerhalb von {php}...{/php}, siehe Doku - davon wird allerdings abgeraten.

      Ok, danke Dir.

      Hotti

    2. Moin!

      Hallo,

      darf das Template php-code enthalten, [...]

      Ja, innerhalb von {php}...{/php}, siehe Doku - davon wird allerdings abgeraten.

      Wie man unschwer erkennen kann, ist diese Funktion ab Smarty 3.1 nicht mehr im zentralen Paket enthalten, sondern muss wieder dazuinstalliert werden.

      Soviel zum Thema "wird abgeraten..." :)

      - Sven Rautenberg