Ankündigung

Einklappen
Keine Ankündigung bisher.

Template Engine vs PHP-Includes

Einklappen

Neue Werbung 2019

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

  • Template Engine vs PHP-Includes

    Hallo,

    ich habe mir jetzt einige Forenbeiträge in den unterschiedlichsten Foren zum Thema Template-Engines durchgelesen. Wie es scheint, gibt es 2 Lager. Die einen sind dafür eine fertige Engine à la Smarty zu verwenden, andere halten Template-Engines für überflüssig und arbeiten mit includes und Pseudo-Templates. Jetzt zu meiner Frage:

    Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?

    Bin gerade ratlos. Und gespannt auf interessante hilfreiche Antworten.


  • #2
    Im Endeffekt ist ein Templatesystem nichts anderes als ein auf "include" basiertes System.

    In Smarty wird z.B. das Template welches man gestalltet bei der ersten Benutzung in eine PHP Datei umgewandelt in der genau das steht was auch jemand schreiben würde der mit "includes" arbeitet. Smarty "included" dann bei den nächsten aufrufen dieses Templates die PHP Datei und führt diese aus. Im Endeffekt kommts also aufs selbe raus.

    Die Performance von der "include-Methode" wirst du wohl mit keinem Templatesystem á la Smarty hinbekommen. Zu Fehlern kommt es nicht da erst included wird egal ob da eine Schleife in der Datei ist oder nicht.

    Die Frage ist eher BRAUCHST du ein Templatesystem bzw. wäre es sinnvoll? Templatesysteme bieten oft einige Vorteil gegenüber nur die includes per Hand zu erstellen. Z.B. kann Smarty die Ausgabe cachen (zwischenspeichern). Bei meinem Projekt wird die Startseite mit allerlei Daten aus der Datenbank erstellt, da ist es sehr sinnvoll die Seite für 1 Stunde zu cachen ... so wird aus z.B. 10 000 DB Querys pro Stunde einfach nur einmig 5 um die Seite zu erstellen.

    Wenn du natürlich die Vorteile die Smarty und Konsorten bieten nicht brauchst, reicht es auch einfach mit der "include" Methode zu arbeiten.

    Ich verwende Smarty, zwar nur mit einem kleinen Teil der Features aber es bietet doch einige Möglichkeiten die mir die Arbeit erleichtern bzw. wichtig für die Performance sind.

    Kommentar


    • #3
      Re: Template Engine vs PHP-Includes

      Zitat von aktionkuba
      andere halten Template-Engines für überflüssig und arbeiten mit includes und Pseudo-Templates.
      Ziel deiner Anwendungen sollte es (aus Sicht des Programmierers) sein, dass du den Inhalt, die Daten von deinem Code trennst. Der Vorteil liegt auf der Hand: Ganz primär der Übersichtsgewinn, ich erfasse das HTML recht schnell und getrennt davon kann ich den Code betrachten, der jetzt frei von HTML ist. Das ist gut, denn nun kann ich den HTML-Code ändern, ohne erstens (das schwächere Argument) PHP beherrschen zu müssen und zweitens, das Template komplett austauschen oder ersetzen, ohne den Code zu beeinflußen. Das könnte entweder ein Skin-Switcher für den Webseiten-Besucher sein, oder eine Layout-/Corporate-Design Änderung seitens des Betreibers sein.
      Hier können noch mehr Vorteile zum Tragen kommen, immer abhängig davon ob du Flexibilität als Vorteil siehst. Das musst du nicht, man kann ja auch anfangen zu argumentieren, dass ein Skript in einer einzigen Datei kompakter und schneller ist. Das ist auch richtig. Die Argumente musst du für dich persönlich gewichten.

      Zitat von aktionkuba
      Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?
      Nein, ich sage mal, mit kleinen und mittleren Projekten kannst du diese Grenze nicht durchbrechen. Jeder include() verursacht jedoch einen langsamen Dateizugriff. Das Projekt wird insgesamt langsamer. Aber keine Sorge, bei kleinen bis mittleren Projekten ist dies kaum relevant.

      Du solltest zunächst nur berücksichtigen, ob ein Auslagern von Code aus programmiertechnischer Sicht Sinn macht. Performance kannst du später durch Cachen oder andere Tricks erhöhen.

      Zitat von aktionkuba
      Bin gerade ratlos. Und gespannt auf interessante hilfreiche Antworten.
      Smarty ist durch seine Komplexität etwas überladen. Ich empfehle dir eine ganz einfache Syntax für Templates:

      Template:
      Code:
      <html>
      <body>
      
      <h1><?=$this->title?></h1>
      
      <? foreach ($this->books as $book): ?>
      <?=$book?>
      
      <? endforeach; ?>
      
      </body>
      </html>
      Klasse:
      PHP-Code:
      <?php
      class XTemplate
      {
          private 
      $_variables = array();

          public function 
      __set($key$value)
          {
              
      $this->_variables[$key] = $value;
          }

          public function 
      __get($key)
          {
              if (!
      array_key_exists($key$this->_variables)) {
                  
      trigger_error("xtemplate::__get(): property [i]$key[/i] does not exist"E_USER_NOTICE);
                  return;
              }
              return 
      $this->_variables[$key];
          }

          public function 
      display($template)
          {
              if (!
      is_readable($template)) {
                  
      trigger_error("xtemplate::display(): template file [i]$template[/i] is not readable"E_USER_NOTICE);
                  return;
              }
              include 
      $template;
          }
      }
      ?>
      Anwendung:
      PHP-Code:
      <?php
      require_once 'XTemplate.php';
      $tpl = new XTemplate();
      $tpl->title 'Meine Bücherliste:';
      $tpl->books = array('Die Bibel''Die rote Couch''Die dunkle Seite');
      $tpl->display('template.tpl.php');
      ?>
      (ungetestet)

      In diesem Beispiel verwendest du im Template-File einfach PHP als Template-Sprache und greifst per $this auf die Properties des Objekts zu, dass du im letzten Codeabschnitt erstellt hast.

      So einfach kannst du also schon PHP von HTML trennen, mit dabei sogar schon eine Mini-Fehlerprüfung.

      Ich würde ersteinmal versuchen, ob dir das nicht schon reicht, oder ob es wirklich noch Smarty sein muss.

      Kommentar


      • #4
        Hallo aktionkuba,

        Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?
        Wie Zergling schon sagte geht es darum, ob du das brauchst. In recht komplexen Systemen und Seiten ist das meiner Ansicht nach unentbehrlich, da man nur so Funktionen kapseln und wiederverwenden kann. Änderungen am Aussehen passiert dort rein über Templates, die Funktion an sich bleibt gleich. So kann man Module erzeugen, die in unterschiedlichen Seiten anders aussehen und im Kern die jedoch gleiche Funktion besitzen. Verschiedene objektorientierte Design-Pattern gehen auf dieses Thema ein. Hier ist allen voran MVC zu nennen.

        Für eine einfache Seite kann ich dir nur empfehlen, das auf die herkömliche Art und Weise zu gestalten, hast du komplexere Strukturen, solltest du zwingen eine fertige Template-Engine oder gar ein Framework (z.B. http://www.adventure-php-framework.org) einsetzen, das dir diese Funktion bereits bietet.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design before you start to write code!
        2. Discuss and review it together with experts!
        3. Choose good tools (-> Adventure PHP Framework (APF))!
        4. Write clean and reusable software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          Hallo,

          erstmal vielen Dank für die ausführlichen Antworten. Die kleine Template-Engine von Zergling erscheint mir mehr als ausreichend für die Sites, mit denen ich zu tun habe.


          @RaToR
          Danke für die Erklärung wie Smarty im grundegenommen funktioniert. Was bei unseren Kunden oft der Fall ist, daß sie einen Strato- oder 1&1-Webspace haben und wir sie nicht davon überzeugen können, das Paket zu einem guten Webspace zu wechseln. Meinst Du, daß Smarty auf so einem Webspace gut läuft? Ich habe da keine Erfahrung, könnte mir aber vorstellen, daß es Probleme gibt...


          @ Zergling
          Ich habe noch eine Frage wegen der Includes. Wie würdest Du folgende Situation angehen: Du hast bestimmte kleine Schnipsel an Html - ich nenne die mal Boxes. Jetzt will ich über einen Array unterschiedliche Boxes includen.

          Bisher mache ich das so (vereinfacht dargestellt):

          PHP-Code:

          $boxes_show 
          = array('calendar','latest_news','latest_gallery');

          for(
          $i=0;$i<count($boxes_show); $i++){
          include(
          "inc/boxes_".$boxes_show[$i].".inc.php");

          Pro dargestellt Seite können das schon 8 Boxes werden. Macht das so Sinn?


          @dr.e.
          MVC habe ich mir durchgelesen (als auf Wikipedia) aber ich muss gestehen, daß ich es nicht ganz verstanden habe. Das Adventure-Framework klingt interessant. Ich schau mir das mal genauer an!

          Kommentar


          • #6
            Ja im Endeffekt könntest du es so machen. Wenn allerdings der Inhalt der boxes_xxx.inc.php Dateien gleich ist ... dann solltest du vlt. in der Datei eine for-Schleife verwenden und den Inhalt in der .php Datei 8 mal ausgeben.
            Die Frage ist ob du die Boxen überhaupt in seperaten Dateien brauchst oder sie nicht irgendwo zusammenfassen kannst. Ansonsten passt es schon allerdings würde ich
            PHP-Code:
            foreach ($boxes_show as $box) {
                include(
            'inc/boxes_'.$box.'.inc.php');

            verwenden.


            Wenn du PHP unterstützung bei dem Webspace von 1&1 oder Strato hast wird Smarty bestimmt funktionieren. Smarty hat zwar ne Menge an Funktionen aber lädt diese nur bei Bedarf. Probleme sollte es mit Smarty eigentlich nicht geben. Die Ladezeiten wirst du sicher nicht bemerken ob du jetzt so ein simples Templatesystem wie das von Zergling verwendest oder Smarty. Das wirkt sich nur bei Seiten aus wo du wirklich mehrere 100 User gleichzeitig hast, dies schaffen aber nur wenige Seiten. Also zu Problemen wirds bestimmt nicht kommen.

            Kommentar


            • #7
              Lesenswert: http://www.bastian-frank.de/site/fro...t.php?idart=47

              Kommentar


              • #8
                Hallo aktionkuba,

                @dr.e.
                MVC habe ich mir durchgelesen (als auf Wikipedia) aber ich muss gestehen, daß ich es nicht ganz verstanden habe. Das Adventure-Framework klingt interessant. Ich schau mir das mal genauer an!
                Solltest du zu diesen Themen Hilfe brauchen, melde dich.


                @Jogibär: Der Artikel ist echt süß. Ist übrigens genau einer der Gründe, warum ich vor Jahren mit der Entwickung eines Frameworks begonnen habe: ordentlich programmieren zu wollen und für die Ausgabe in ein Bild die selben Business-Komponenten nutzen zu können. Ich halte nichts von der Abbildung sämtlicher Komplexität in Templates (man sieht das ja auch an meinem Framework).
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design before you start to write code!
                2. Discuss and review it together with experts!
                3. Choose good tools (-> Adventure PHP Framework (APF))!
                4. Write clean and reusable software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  @RaZoR
                  Klingt einleuchtend mit den Boxes in einer Datei. Ein bisschen Probleme hatte ich noch mit der freien Sortierung, aber mit einem bisschen array-Geschubse bekommt man es doch hin

                  Kannst Du noch erklären, warum Du die foreach-Schleife der for-Schleife vorziehst?

                  Wegen Smarty. Ist das Dein persönlicher Erfahrungswert oder ist das so ein genereller Tenor zum Thema Smarty und Strato-/1&1-Webspace.


                  @Jogibär
                  Hab ich auch schon zuvor gelesen. Eben dieser Artikel hatte mich letzte Woche zum nachdenken gebracht! Finde ich echt gut.


                  @dr.e.
                  Danke für das Angebot. Ich werde mich wohl am Wochenende hinsitzen und falls es Frage gibt werde ich mich melden!

                  Kommentar


                  • #10
                    Danke. Da kann man mal drauf verlinken!
                    privater Blog

                    Kommentar


                    • #11
                      Zitat von Ben
                      Danke. Da kann man mal drauf verlinken!
                      Ich halte von der Verteufelung von Smarty nichts. Natürlich ist Smarty nur ein Zwischenschritt, aber das ganze gleich derart negativ abzustempeln ist arrogant und weltfremd, meine persönliche Meinung (die natürlich sofort verteufelt werden wird).

                      Kommentar


                      • #12
                        Fatal error: Method XTemplate::__get() must take exactly 1 argument in T:\Webserver\projects\local\host\private\includes\ classes\XTemplate.php on line 18
                        Habe die Mini-Template-Engine auf Seite 1 dieses Threads dahingehend geändert (hab das Skript gerade selbst nochmal gebraucht )

                        Kommentar


                        • #13
                          Habe den Artikel nur überflogen, aber irgendwie klingt der Schreiberling einfach nur frustriert. Templates wurden ursprünglich entworfen um Designern, die in der Regel in Programmierung nicht so bewandert sind, einfache Hilfsmittel an die Hand zu geben. Was er schreibt wirkt auf mich einfach undifferenziert und schlecht. Er konstruiert ein Szenario, das für Smarty nicht mal ein Problem ist, und versucht daran einseitige Kritik an Smarty zu üben. Sorry, aber ich verweigere die BILD nicht um sowas jetzt zuzustimmen

                          Was er da unter "Ganz anders" von sich gibt, verstehe ich schon mal garnicht. Wo widerspricht MVC denn die Verwendung von Template-Engines?

                          Ach, ich sag ja nicht, dass Smarty das Non-Plus-Ultra is, ich sag nichtmal, dass es gut ist (ich verwende es garnicht ). Ich meine bloss, dass der Artikel keine Aussagekraft hat.
                          Nicht jeder Fehler ist ein Bug.

                          Kommentar


                          • #14
                            Ich kann den Typ der ihn verfasst hat nicht leiden, aber der Artikel ist in Ordnung.

                            Kommentar


                            • #15
                              Man muss jedoch zugestehen, dass hinter der Ironie des Artikels ein kleiner Funkten Wahrheit über die Verwendung von Template-Engines und deren Trends steckt. Es wurden Template-Engines meiner Meinung nach tatsächlich zu viel Bedeutung zubemessen ohne sich Gedanken zu machen, ob diese für eine generische MVC-Implementierung tatsächlich zu gebrauchen sind. Diese Teile wiedersprechen einem MVC sicher nicht (wie KingCrunch schon sagte), jedoch ist das (leider oft) nicht mal die halbe Miete, denn Template-Engines, die keine Coding Conventions hinsichtlich vorgeben verleiten leider oft zum frickeln.

                              Nice evening äweribodi!
                              Viele Grüße,
                              Dr.E.

                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              1. Think about software design before you start to write code!
                              2. Discuss and review it together with experts!
                              3. Choose good tools (-> Adventure PHP Framework (APF))!
                              4. Write clean and reusable software only!
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                              Kommentar

                              Lädt...
                              X