[PHP] Beste Template Engine!?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von hacker5, 2. Dezember 2009 .

  1. 2. Dezember 2009
    Beste Template Engine!?

    Hey. Mich würde mal interessieren welche Tempalte Engine ihr so benutzt?
    Wichtig finde ich den leichten umgang von Mysql und If Abfragen und Schleifen.

    Ich möchte nicht erst die ganzen Daten in einen Array schreiben müssen und diese wieder umständlich zuweisen müssen.

    Ich fänd es praktisch, wenn man while,for, foreach, if ect. benutzen könne. Habt ihr soetwas schonmal gesichtet? Smarty ist nett und schön aber ich find recht umständlich.


    vlibTemplate ist schon ganz gut finde ich.. Nur muss man halt die Datenbankabfrage in ein Array schreiben und dann im Template mit einer forschleife das ganze wieder ausarbeiten.
     
  2. 2. Dezember 2009
    AW: Beste Template Engine!?

    Ich nenne die Template engine liebevoll: PHP

    PHP selbst ist eine "Tempalte Engine". Es ist absolut nicht nötig diese seltsamen "frameworks" zu benutzen.

    PHP bietet doch genau alles was du brauchst, wieso solltest du dann noch ein Extra brauchen?
     
  3. 2. Dezember 2009
    AW: Beste Template Engine!?

    meine template-engine!

    ein paar beispiele:
    Code:
    for:
    {for $i = 0; $i < 10; ++$i: @$i"\n"} -> php for ohne code-block
    {for $i = 0 upto 10; + 1: @$i."\n"} -> alternative syntax (upto und downto)
    {for $i = 10 downto 0; - 1 @$i."\n"; /for} -> php for mit code-block
    
    foreach:
    {for [$foo, $bar] in $array: @$foo." => ".$bar} -> php foreach ohne code-block
    {for $foo in $array @$foo." => ".$bar; /for} -> php foreach mit code-block, ohne "key"
    
    object-access:
    {var $foo = array "item": "value"; @$foo.item} -> entspricht $foo['item']
    {@$foo.item()} -> entspricht $foo->item()
    {@$foo['item']} -> entspricht $foo['item']
    {@$foo->item} -> entspricht $foo->item
    {@$foo->item()} -> enspricht $foo->item()
    
    array-access: genauso wie in php [nummer]
    {@someFunction()[0]} -> ist möglich!
    
    includes:
    {include "datei"} -> runtime include
    {include <datei>} -> compile-time include
    und es gibt ein interface für eigene syntax und parser-funktionen

    für mysql könnte man sogar sowas implementieren:

    Code:
    {var $res = sql select * from foo where bar = "baz" limit 1}
    {for $row in sql $res}{@dump $row}{/for}
    was ich aber für usinnig halte, da ich datenbank sachen im controller erledige (im template dann ggf. n function-call)
     
  4. 2. Dezember 2009
    AW: Beste Template Engine!?

    Full Ack
    Soll keine Werbung sein, aber einfach mal nach "Sinn und Unsinn von Template Engines" googeln.
    1. Treffer:
    http://www.ein-einfaches-cms.de/sinn-und-unsinn-von-template-engines-in-php

    In so einer Engine sehe ich nur absichtlich erzeugten Overhead und Codegedüns. Wieso einfach wenns auch kompliziert geht...
     
  5. 2. Dezember 2009
    AW: Beste Template Engine!?

    da stimme ich auch zu, aber bei großen projekten is ne php-datei voll mit html und php-tags einfach . bei ner template-engine kann man sauber im controller arbeiten, hat quasi nur php-code vor der nase.

    bei kleineren projekten (wie zb.: ne minimale firmenhomepage) schmeiss ich auch alles zam, interessiert ja eh keinen xD

    und im grunde erzeugt meine tpl-engine keinen unnötigen overhead (zumindest keinen spürbaren - und wenn dann nur beim compilen = einmalig).

    ob ich jetzt das schreib:
    PHP:
    <? php  print  System :: getLangObj ()-> getItem ( 'index' );  ?>
    oder:
    Code:
    {@lang "index"}
    und dann vom compiler den exakt selben code wie oben ausführen lass is - wie man in bayern sagt - kupft wia gsprunga! zudem kann ich im compiler das token "lang" auch überladen, da hilft beim php-code nur suchen->ersetzen

    //edit: und an alle die mit <?=$foo;?> daherkommen brauchen eh ned mitreden -> viel spaß mit php6
     
  6. 2. Dezember 2009
    AW: Beste Template Engine!?

    Bei solchen Kommentaren fällt mir absolut nichts mehr ein =). Aba nun gut, ich war auchmal so naiv.

    Schaut dir mal das MVC - Prinzip an. Ich behaupte mal dass ohne die Trennung von Logik und Design es bei großen Projekten enorm schwierig wird effektiv zu erweitern oder zu warten. Ich spreche leider aus eigener Erfahrung, habe mal eine Community geschrieben (in der Art wie StudiVz) ohne dabei ein Template zu benutzen. Nach einem Jahr Entwicklung war ich soweit, mein Projekt komplett in die Tonne zu hauen genau aus diesem Grund. Ich konnte es einfach nicht mehr weiterentwickeln =). Glaubt mir früher oder später (spätestens wenns professionell wird) kommt ihr um eine Template System einfach nicht rum, und das ist auch gut so. :]
    ps: sorry fürs rumflamen^^, und ich benutze sehr gerne SMARTY finde es eigentlich nicht umständlich, was genau stört dich daran?
     
  7. 3. Dezember 2009
    AW: Beste Template Engine!?

    Und genau darum geht es mir.. Bei kleinen Projekten ist es klar, dass man PHP und HTML zusammen werfen kann.

    Wie Murdoc schon sagt..bei großen Projekten nervt es einfach immer im Quelltext zu suchen das und das zu ändern. Viel besser ist ins Template zu gehen änderungen vorzunehmen und das ganze zu speichern.

    Und ja wenn die hoster auf PHP6 umstellen werden sich viele in den ***** beißen..Alleine alle die noch mit Shorttags arbeiten.

    Aber das darfst du mir jetzt bitte noch erklären Murdoc. Wie würdest du das an deiner Stelle lösen?


    Beispiel:

    PHP:
    $sql  $db -> query ( "SELECT a FROM b" );  // enthält z.b. 20 datensätze

    while( $res  $db -> fetch_array ( $sql )) {
    $test                 = $res [ 'test' ];

    echo 
    "<div class=\"line\"><h2> $test </h2></div>" ;
    }

    Ich bin soweit fit in PHP denke ich..Nur in Templates hab ich mich nie einarbeiten wollen. Um mir ggf. mal Arbeit zu sparen und den Überblick bei großen Dingern zu behalten wollte ich das ganze aber mal angehen


    Und Danke an alle die gepostet haben.



    Ansich nichts. Ich dachte halt nur, dass eine Datenbankabfrage vllt leichter geht. Bin zusehr an das arbeiten ohne Templates gewohnt und dadurch manchmal faul was neues zu lernen
     
  8. 3. Dezember 2009
    AW: Beste Template Engine!?

    PHP:
    class  EineSeite 
    {
        public function 
    datenbankZeug ()
        {
             
    $sql  System :: getDBObj ()-> query ( '...' );
             while(
    $row  $sql -> fetch ( PDO :: FETCH_ASSOC ))
                 
    System :: getTPLObj ()-> assign ( 'row' $row )-> display ( 'snipped' );
        }
    }
    im maintemplate:
    Code:
    {@$this->datenbankZeug()}
    -> $this zeigt in meinem template nicht auf die template-engine, sondern auf den controller!

    im snipped:
    Code:
    <div class="line"><h2>{@$row.test}</h2></div>
    wenn du aber wirklich nur diese zeile zusammenbaust, dann lass das besser so wie dus gepostst hast

    und komm bloß nicht auf die idee alle zeilen in ner schleife in ein array zu speichern und anschließend das ganze nochmal in ner schleife im template auszugeben, denn das muss absolut nicht sein.
     
  9. 3. Dezember 2009
    AW: Beste Template Engine!?

    http://www.phpro.org/tutorials/Model-View-Controller-MVC.html#9
    http://tutorials.lemme.at/mvc-mit-php/#view

    schau dir evtl. die beiden sachen an, sind simpel und schnell. der zweite link ist ganz interessant
     
  10. 3. Dezember 2009
    AW: Beste Template Engine!?

    Ja ich gebe dir völlig recht, MVC ist absolut notwendig, absolut sinnvoll und bei größeren Projekten nicht wegzudenken!!!!

    ABER: Hast du schon mal die großen, produktiven Frameworks - wie Zend,CodeIgniter,CakePHP,Kohana,Flow3 usw - mit einer TemplateEnginge gesehen? NEIN!! Ich gebe zu, sie bieten im Grunde alle eine Implementierung von z.b. SMARTY an; aber das ist optional wie alles andere auch.

    Warum machen Sie das nicht? (Beispiel Kohana)

    Controller:
    PHP:
    class  My_Controller  extends  Template_Controller  {
      public function 
    myAction  () {
        
    $this -> template -> meineVar  'LALALA Aus der DB' ;
        
    $this -> template -> meinAr  = array( 'eins' 'zwei' 'drei' );
      }
    }
    View:
    PHP:
    <html>
    <head><title>:mad: Yeah ein Template - <?php  echo  Kohana :: lang ( 'main.*****' );  ?></title></head>
    <body>
      <div><?php  echo  $meineVar ?></div>
      <?php  foreach ( $meinAr  as  $val ):  ?>
        <p>
           <?php  echo  $val ?><br />
       </p>
      <?php  endforeach;  ?>
     </body>
    </html>
    Was ist daran unübersichtlich? Wo fehlt die Trennung von Template und Code? Wo muss der Designer mehr können als bei SMARTY?

    Ich gebe Murdoc recht, dass TPL Engines manchmal nicht übel sind und ich bezweifle nicht, dass sie manchmal eine "schönere Syntax" haben, aber ich bezweifle, dass es die Produktivität steigert!! Ich bezweifle, dass es einem Designer leichter fällt und das jeder Designer lieber SMARTY als PHP lernt!

    Template Engines sind meiner Meinung nach die beste Methode um Objektorientierung zu üben und mal mehr oder weniger sinnvoll umzusetzen, aber wirklich Produktiv sind sie nicht.
     
  11. 3. Dezember 2009
    AW: Beste Template Engine!?

    da hast du vollkommen recht. die aussage das smarty oder was auch immer leichter als php sein soll stimmt ganz einfach nicht.

    ABER bei einer template-engine kann der designer nicht viel falsch machen. bei php hingegen hat man schnell mal nen parse-error, welche man mit ner vernünftigen engine umgehen kann indem man fehlerhafte syntax entweder ignoriert, versucht richtig zu interpretieren oder indem man eine notiz ausgibt direkt da wo der fehlerhafte code stand -> die ausgabe läuft aber weiter!

    dann kommen noch nützliche sachen wie statische einbindungen von anderen templates, was am ende wiederkehrende includes spart und statisches einfügen von texten wie z.b. sprachvariablen.

    HTML:
    <html>
     <head>
     <title>{@lang <main.title>}</title>
     {include <headInclude>}
     </head>
     <body>
     <p>{$xss_sichere_ausgabe}</p>
     <p>{@$html_ausgabe}</p> 
     <p>{$je"de."menge"->fehler["haft.te]+syn->tax}</p>
     </body>
    </html>
    result:
    PHP:
    <html>
        <head>
            <title>Titel der Seite</title>
            (meta-tags und scripte etc)
        </head>
        <body>
            <p><?php  print  htmlentities ( $this -> _vars [ 'xss_sichere_ausgabe' ]);  ?></p>
            <p><?php  print  $this -> _vars [ 'html_ausgabe' ];  ?></p> 
            <p><!-- fehlerhafte syntax in template "name-des-templates" zeile XY: unerwarteter string "de" - ausdruck verworfen --></p>
        </body>
    </html>
    das ganze wird dann als php-code gespeichert und ist über die entsprechende lang-id des benutzers sofort einsatzbereit (d.h. wird nicht nochmal durch den tpl-compiler gejagt)

    wie du siehst ist der request einmal pro lang-id ein wenig langsamer, im nachhinein aber schneller da es sogar weniger php-code ist als normal.

    und wenns sein muss kann man die templates auch vor dem launch durchn compiler jagen.

    //ps: ich verwende nicht smarty, nicht das leute anfagen die funktionen zu suchen ^^

    weil du noch nie ne brauchbare, auf deine bedürfnisse zugeschnittene tpl-engine in verwendung hattest
     
  12. 4. Dezember 2009
    AW: Beste Template Engine!?

    So sorry keine Zeit gehabt die Tage. Danke schonmal Murdoc. Gibt es deine Engine public oder ist die nur für dich bestimmt?

    In PDO sollte ich mich wohl auch mal einarbeiten.




    Auf diesem Wege arbeitet vlibTemplate und smarty doch auch oder irre ich mich jetzt?
     
  13. 4. Dezember 2009
    AW: Beste Template Engine!?

    das ist die gänigste methode die die meißten template-anhänger verwenden. ich für meinen teil finde das bescheuert, sorry ^^

    du gehst ja auch ned zum bäcker, kaufst dir 2 semmeln, gibst sie dem verkäufer wieder zurück und lässt sie dir nochmal geben. also ich nehm die dann und ess sie anschließend
     
  14. 4. Dezember 2009
    AW: Beste Template Engine!?

    Nimm Smarty, ist einfach und effizient, wirklich lohnen tut es sich aber erst bei größeren Projekten.
     
  15. 4. Dezember 2009
    AW: Beste Template Engine!?

    Sorry für Off-Topic, aber die eigentliche Frage ist ja bereits beantwortet.

    Mich würde jetzt mal interessieren wann so einen Template-Engine wirklich Sinn macht? Ich habe auch mal eine Zeit lang eine benutzt, aber seit dem Umstieg auf ein PHP MVC Framework, benutz ich eigentlich nur noch PHP als 'Template Engine' und komm damit Prima zurecht. Mir fällt auch grade keine Situation ein in der ich eine externe Engine gebrauchen könnte?!

    (Mal abgesehen von ParseErrors, die kann ich ja sofort fixen)

    // edit: 888 Beiträge !

    // Edit2:
    @hacker5 (ein Post untendrunter):
    Ich meinte eher weil Murdoc etwas von 'zugeschnitten für deine Bedürfnisse' gesagt hat...
     
  16. 4. Dezember 2009
    AW: Beste Template Engine!?

    Da hast du wohl Recht. Aber mit deiner vorgestellten Mehtode wird doch nur ein Ergebnis ausgegeben oder nicht?


    @Coksnuss
    Hast dir deine Frage doch selber beantwortet. Ne Template Engine macht Sinn um den Überblick zu halten, Code und HTML zu trennen. Wenn du das mit deinem MVC Framework hinbekommst ist doch okay.
     
  17. 4. Dezember 2009
    AW: Beste Template Engine!?

    ich bleib mal bei den sprachvariablen.
    nehmen wir an deine benutzer können wählen in welcher sprache sie dei seite ansehen möchten. dazu kann man jetzt entweder folgenden php-code in eine view-datei packen:

    PHP:
    <? php gib_sprachvariable_aus ( 'name-der-variablen' );  ?>
    oder man erstellt sich eine template-engine die templates "vor-parsed" (im wcf nennt man das pre-compiler, ich nenne das statische einbindung von text):
    Code:
    {lang <name_der_variablen>}
    wird zu:
    Code:
    Inhalt der variablen
    quasi ein platzhalterprinzip

    diesen code speichere ich nun auf dem server und schreib in den dateinamen noch die sprach-id (1 = deutsch, 2 = englisch etc...). sieht dann in etwa so aus: name_des_templates_1.phtml

    wenn dieses template dann anschließend nochmal über die "display"-methode angefordet wird, nehm ich direkt die datei im cache und binde sie ein (one compiler, da die datei bereits "kompiliert" ist).

    das hat ganz einfach den vorteil, dass diese sprachvariablen nicht mehr über php angefordert bzw. ausgegeben werden müssen.

    viele können sich das nicht richtig vorstellen, da sie meinen durch cachen der templates geht die ganze dynamic verloren. das stimmt nicht! eine gute template-engine übersetzt die tags im template in php-code, der nicht direkt ausgeführt wird sondern erst gespeichert und anschließen via "include" eingebunden wird.

    ich veröffentliche meine engine mal morgen oder übermorgen wenn ich zeit hab.
     
  18. 4. Dezember 2009
    AW: Beste Template Engine!?

    Also ich benutz meine eigene Template Klasse/"Engine"! ist immernoch am schönsten und am leichtesten genau anpass/erweiterbar.
     
  19. 4. Dezember 2009
    AW: Beste Template Engine!?

    Danke für die ausführliche Antwort Murdoc, kanns mir jetzt vorstellen, wobei auch dieses Feature durch das MVC-Framework bereitgestellt wird (internationalization).

    Meine Meinung: Template-Engines sind entweder zu komplex, oder haben zu wenig Funktionsumfang.
    Ich habe wie gesagt auch mal eine Template-Engine benutzt, brauch das aber durchs MVC-Prinzip nicht mehr.
     
  20. 5. Dezember 2009
    AW: Beste Template Engine!?

    Stimmt! Habs echt noch nie gebraucht und wüsste auch nicht, wann ich es mal brauchen sollte.

    Sehe ich genauso.

    Nagut es kann Situationsbedingt sein, wie ich das so sehe. Aber bisher habe ich noch nie eine gebraucht, in keiner Argentur in der ich gearbeitet habe und in keinem Projekt.
    Wenn ich alleine arbeite kann ich ja PHP Code nutzen, es gibt ja keinen Designer der mir dummen PHP-Code reinhaun könnte. Wenn wir im Designer-Coder-Team arbeiten war bisher noch nie ein Designer ohne kleine PHP Kenntnisse dabei. Und selbst wenn, hat er es in HTML geliefert und ich habe die Platzhalter ersetzt.
    Somit ist das trotz der wirklich guten Begründung von Murdoc doch irgendwie hinfällig. Unc caching ist auch in jedem Framework ganz gut implementiert, unabhängig ob PHP oder TPL-Engine.

    Aber ich sehe schon, das scheint wieder auf eine Philosophie Frage hinauszulaufen. Es gibt kein "Gut und Böse"
     
  21. 5. Dezember 2009
    AW: Beste Template Engine!?

    mal ne zwischenfrage

    mir ist klar wie man sucht/ersetzt aber mir fällt keine wirkliche suchstrategie ein ...

    Wenn ich jetzt
    HTML:
    <div>{if lang == de}MeinText{endif}</div>
    z.b. haben will, würde ich erstmal nach { } suchen, nur für die masse an befehlen.. müsste man sich quasi nen eigenen compiler basteln der echt jeden befehl, den man haben will, in php übersetzt?

    Quasi:
    1. Wenn Inhalt von { } mit if anfängt, ersetze mir if + a + operator + b durch if(a OP b) {
    2. "MeinText" ist ja kein befehl also: Wenn kein Befehl: echo <inhalt>
    3. Suche nach ende der abfrage {endif} und ersetze durch }

    if(a operator b) { echo MeinenInhalt; }

    lieg ich da richtig oder ist meine denkweise einfach komplett in die falsche richtung?

    edit
    und am ende dann einfach: eval($meincommand) ?
    edit2... ohne berücksichtigung der ganzen sicherheitsvorkehrungen die man vorher treffen muss bevor man eval nutzt
     
  22. 5. Dezember 2009
    AW: Beste Template Engine!?

    naja, vielleicht gibts tpl-engines die so arbeiten , aber das is blödsinnig.

    du nimmst die sachen, die in den { } stehen und baust sie zu php-ausdrücken um, speichserts das ergebnis aufm server und bindest das ganze via include ein. das ist die sauberste und schnellste methode. und dadurch das du die sachen direkt aufm server gespeicherst hast, musst du sie beim nächsten mal nicht nochmal duch nen tpl-parser jagen.
     
  23. 5. Dezember 2009
    AW: Beste Template Engine!?

    php ist eine template-engine. warum sollte eine "neue programmiersprache" für designer entstehen, wenn fast jeder designer php kann. das ist quatsch, sinnlose rechenzeiten für apache als auch für den server!

    http://tutorials.lemme.at/mvc-mit-php/#view
    wenn man diese klasse etwas ausbaut, kann man gute performance sowie übersicht erreichen. cache und alles andere sind kein problem
     
  24. 5. Dezember 2009
    AW: Beste Template Engine!?

    klar, aber es schadet nicht wenn man weiß wie man mit dem kram selbst umgehen kann ich mag es einfach mich weiter zu bilden egal ob sinnvoll oder nicht

    aber danke ihr beiden
     
  25. 6. Dezember 2009
    AW: Beste Template Engine!?

    was soll ich unter "klar" verstehen, wenn dein code "kram" für dich ist? habe 2 links gepostet, hoffentlich hast du dir mal angeschaut.

    immer wieder gerne
     
  26. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.