Net4Speed: PHP / HTML

Hallo, ich habe mal eine allgemeine Frage ans Forum.
Soll ich meine Seite komplett mit PHP generieren, also mit echo,
oder sollte ich den HTML-Code von den PHP Anweisungen trennen?
Wie würdet ihr es idealerweise machen?

LG

  1. Wie würdet ihr es idealerweise machen?

    Idealerweise ist Programmcode und HMTL immer getrennt. Genau wie HTML/CSS oder andere Dinge die nichts miteinander zu tun haben sollten.

    Struppi.

    1. Also:

      <?php  
         //anweisungen  
      ?>
      
        
      <html>  
          <p>Irgendwas</p>  
          [code lang=php]<?php echo "nochwas" ?>
      

      </html>[/code]

      ?

  2. Hallo, ich habe mal eine allgemeine Frage ans Forum.
    Soll ich meine Seite komplett mit PHP generieren, also mit echo,
    oder sollte ich den HTML-Code von den PHP Anweisungen trennen?

    statischen Inhalt ausserhalb, dynamischen inhalt innerhalb.
    scheint irgendwie logisch oder?

    Wie würdet ihr es idealerweise machen?

    <del>PHP</del><ins>Perl</ins> produziert HTML und auf Bedarf eine statische HTML Version.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
  3. Moin!

    Hallo, ich habe mal eine allgemeine Frage ans Forum.
    Soll ich meine Seite komplett mit PHP generieren, also mit echo,
    oder sollte ich den HTML-Code von den PHP Anweisungen trennen?
    Wie würdet ihr es idealerweise machen?

    LG

    Templates. Ich verwende eine eigene Template-Engine. Und das geht so: Im HTML-Template stehen Platzhalter. Nach dem Berechnen aller Werte wird das Template gelesen, die Werte werden eingesetzt.

    <?php  
    if(!isset($arTemplate['TemplateFile'])) {  
    	 die ('Fatal: $arTemplate[\'TemplateFile\'] ist nicht gesetzt!'."\n");  
    }  
    if(!is_file($arTemplate['TemplateFile'])) {  
    	die ('Fatal: '.$arTemplate['TemplateFile'].' ist keine Datei!'."\n");  
    }  
    if(!is_readable($arTemplate['TemplateFile'])) {  
    	die ('Fatal: '.$arTemplate['TemplateFile'].' ist nicht lesbar!'."\n");  
    }  
      
    $template=file_get_contents($arTemplate['TemplateFile']);  
      
    FastixTemplateReplace($arTemplate, $template);  
      
    function FastixTemplateReplace($arTemplate, $template) {  
    	$keys=array_keys($arTemplate);  
    	foreach ($keys as $key) {  
    		if ($key != 'TemplateFile') {  
    			$arElement=$arTemplate[$key];  
    			$replace[]=FastixTemplateCreateElement($arElement);  
    			$search[]='$arTemplate[\''.$key.'\']';  
    		}  
    	}  
    	print str_replace($search, $replace, $template);  
    }  
    ?>
    

    Ein HTML-Template sieht dann so aus:

    <html>  
    	<head>  
    		<title>$arTemplate['DocHeadline']</title>  
    	</head>  
    	<body>  
    		<h1>$arTemplate['DocHeadline']</h1>  
    		<p>$arTemplate['DocText']</p>  
    	</body>  
    </html>
    

    Das geht recht schnell und ist anpassungsfähig und erweiterbar (Ich habe in Projekten noch Tags für Umrechnungen der Währung und Übersetzungen). Natürlich gibt es dafür noch diverse Engines wie z.B. smarty. Die können aber alle zuviel (aber nie das was ich genau brauche...) und sind deswegen langsamer.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Moin!

      Ach so. Die Template-Engine (das PHP-Skript) binde ich einfach mit

      require $_SERVER['DOCUMENT_ROOT'].'/includes/FastixFastTemplate.php'

      in der letzten Zeile ein. Mehr muss nicht gemacht werden.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    2. hi,

      Templates. Ich verwende eine eigene Template-Engine. Und das geht so: Im HTML-Template stehen Platzhalter. Nach dem Berechnen aller Werte wird das Template gelesen, die Werte werden eingesetzt.

      Natürlich gibt es dafür noch diverse Engines wie z.B. smarty. Die können aber alle zuviel (aber nie das was ich genau brauche...) und sind deswegen langsamer.

      Der Nachteil bei deiner Variante ist, dass du, so wie es jetzt aussieht, kein Caching bzw. Template-Caching hast -- nicht nur das Caching für die Browser, sondern ein Caching direkt für die Templateverarbeitung.
      Smarty legt beim ersten aufruf der Seite eine Templatecache an, danach wird meist nur noch über diese Ressource gearbeitet -- die ganzen replace-Geschichten bei jedem Aufruf fallen weg.

      Da steht dann sowas wie
      <?php echo $this->_tpl_vars['Navigation']; ?>

      Ich finde Smarty Klasse, man kann sich seine eigenen Funktionen bauen und einbinden, man kann (sollte aber nicht) auch direkt PHP-Code in den Templates verwenden usw. usw.

      mfg

      1. Der Nachteil bei deiner Variante ist, dass du, so wie es jetzt aussieht, kein Caching bzw. Template-Caching hast -- nicht nur das Caching für die Browser, sondern ein Caching direkt für die Templateverarbeitung.
        Smarty legt beim ersten aufruf der Seite eine Templatecache an, danach wird meist nur noch über diese Ressource gearbeitet -- die ganzen replace-Geschichten bei jedem Aufruf fallen weg.

        Ich habe einen solchen Cache in BdE-Online für rechenintensive Operationen. Diese haben aber nichts mit preg_replace Patterns zu tun. Diese sind aus Perl Sicht zu performant, als dass sich ein Caching lohnen würde.
        Ein Cache macht auch seine Sorgen. So musst du ihn leeren können, damit in der Kontrollphase frische Resultate geliefert werden. Keine Ahnung ob Smarty das vorsieht.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. hi,

          Ein Cache macht auch seine Sorgen. So musst du ihn leeren können, damit in der Kontrollphase frische Resultate geliefert werden. Keine Ahnung ob Smarty das vorsieht.

          Smarty ist in Punkto Caching schon recht weit entwickelt, auch was das löschen angeht.
          Und die Template-Caches erkennen sofort, wenn sich an den Templates etwas geändert hat, dass regelt Smarty von selbst.

          Ich teste Generell auf meinem eigenen Rechner, und wenn ich das Caching für User (last-modified Geschichten) aktiviere, dann eh erst nachdem alles Fertig hochgeladen und angetestet ist und funktioniert.
          Man kann sich ja auch eine kleine Funktion mit POST und GET-Parametern schreiben, die es dem Admin erlauben, dass Caching kurzzeitig zu deaktivieren.

          Ich sehe jedenfalls keine Nachteile, von anfang an auf eine ausgereifte Template-Engine zu setzen, statt sich da was selbst zu schreiben (was zum lernen aber auch nicht verkehrt ist) -- das gute ist ja, das an grossen Projekten nicht nur 2 Hände am werkeln sind, die mühselig nach testern suchen müssen, sondern hier sind viele Fachmänner mit unzähligen testern zugange.

          mfg

  4. Hi!

    Soll ich meine Seite komplett mit PHP generieren, also mit echo, oder sollte ich den HTML-Code von den PHP Anweisungen trennen?
    Wie würdet ihr es idealerweise machen?

    Als viel wichtiger sehe ich es an, das Programm allgemein gut zu strukturieren. Eine grundlegende Art und Weise nennt sich EVA-Prinzip, das ist die Trennung des Prozesses nach Eingabe, Verarbeitung und Ausgabe. Der Eingabeteil sorgt dafür, dass die übergebenen Daten in ihre Rohform gebracht werden, also falls nötig Transportmaskierungen entfernt und Typen korrigiert werden. Die Verarbeitung erledigt das eigentliche Ziel der Geschäftslogik, validiert Daten, kümmert sich um die Datenhaltung und stellt die für die Ausgabe benötigten Daten bereit. Auch diese liegen noch in Rohform vor, also bekamen noch keinerlei für eine bestimmte Ausgabe notwendige Behandlung. Der letzte Teil erstellt nun die Ausgabe und fügt diese Daten an den vorgesehenen Stellen ein und achtet dabei darauf, dass sie gemäß dem Ausgabemedium behandelt werden.

    Ob du nun ein zusätzliches Template-System nimmst oder HTML mit eingebettetem PHP für die Ausgabelogik (also beispielsweise Schleifen für Massendaten oder bedingte Ausgaben) verwendest, kommt auch auf deine Bedingungen an. Ein Templatesystem ist vielleicht einfacher zu bedienen für jemanden, der mit Programmierung wenig am Hut hat. Das erkaufst du dir jedoch mit dem für die Abarbeitung zusätzlichen Aufwand. Du musst da selbst entscheiden, was für dich wichtiger ist.

    Die Ausgabe größtenteils mit echo und Konsorten zu produzieren, halte ich für wenig sinnvoll. Du hast den zusätzlichen Aufwand des echo, des Quotierens und des Maskierens innerhalb von PHP und obendrein geht dir noch die Unterstützung seitens diverser Editoren verloren (zum Beispiel: Syntaxhervorhebung, automatische Codevervollständigung). Die Situation entschärft sich nur wenig mit der Heredoc- und Nowdoc-Syntax.

    Da du mit jedem System die gesamte Bandbreite zwischen unübersichtlichen Spaghetti-Code und odentlich strukturiertem Code produzieren kannst, bleibt es am Ende immer dir überlassen, was du selbst bevorzugst.

    Lo!

  5. Für die Trennung spricht dass du wahrscheinlich schon einige HTML, Script und CSS Teile hast, die keinen dynamischen Inhalt haben. Ich verwende schon wegen ein paar Zeilen die Syntax mit <<< (weiß nicht wie das heißt).
    Eine komplette Seite mit echo und Anführungszeichen drum rum ist was unglaublich stressiges. Da ist nicht mal eben was rein oder rauskopiert.

    1. Hi,

      Ich verwende schon wegen ein paar Zeilen die Syntax mit <<< (weiß nicht wie das heißt).

      Das ist die von dedlfix schon angesprochene Heredoc- bzw. neuerdings auch Nowdoc-Syntax. (Letztere erst ab 5.3.0 verfügbar - endlich!)

      MfG ChrisB

      --
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    2. Ich verwende schon wegen ein paar Zeilen die Syntax mit <<< (weiß nicht wie das heißt).

      Heredoc

  6. Soll ich meine Seite komplett mit PHP generieren, also mit echo,
    oder sollte ich den HTML-Code von den PHP Anweisungen trennen?

    Das hängt schon mal schwer davon an, was für Inhalt in welcher Abhängigkeit dargestellt werden soll. Was für Inhalte sollen also in welcher Abhängigkeit dargestellt werden?

    Wie würdet ihr es idealerweise machen?

    Angemessen.