2009-03-23 9 views
0

Was ist besser ... machen Klassen speziell für das Rendern von HTML, etw. wie folgt aus:Wie trennen Sie Präsentation (XHTML) und Funktionalität (PHP-Code)?

class IndexHTML { 
    public $doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"; 
    public $title = "<title>MICE</title>"; //title of document 
    public $contentType = "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />"; 
    public $contentStyleType = "<meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />"; 
    public $jsSrc = "<script type=\"text/javascript\" src=\"main.js\"></script>"; //your javascript files included 
    public $css = "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />"; //your css files included 

    function html_head(){ 
     echo $this->doctype."<html><head>"; 
     echo $this->title,$this->contentType,$this->contentStyleType,$this->jsSrc,$this->css; 
     echo "</head>"; 
     require_once("classes.php"); //require additional needed scripts 
    } 
} 

oder ist es besser, separate Dateien wie head.html zu schreiben (mit nur Kopf notwendig Tags), menu.html, footer.html usw. und dann nur schreiben:

class IndexHTML {  
    function html_head(){ 
     require_once("head.html");  
    } 
} 

Ich bin neu in PHP und versuche den richtigen Umgang mit Dingen zu lernen.

EDIT: Separate Dateien sind besser für die Wartung. Was ist mit Leistung?

Vielen Dank für den Rat.

Antwort

8

Nun, manche mögen dem widersprechen, aber meiner Meinung nach ist PHP, was es gut macht, dass es in erster Linie eine HTML-Template-Engine ist und Klassen/Objekte wirklich eine Nebenerscheinung dafür sind. Ihre IndexHTML-Klasse fügt nicht wirklich viel Wert hinzu. IMHO ist es besser, die .php-Dateien als .html-Dateien mit einigen dynamischen Codeblöcken und -ausdrücken zu behandeln, anstatt einfach nur ein Objektmodell zu erstellen.

+0

Änderbarkeit wird mit diesen Setups zum Desaster. –

+0

Konnte nicht mehr mit dir übereinstimmen celtus, und konnte dir nicht weniger zustimmen d03boy. Würde es lieben, wenn nur einmal die erste Reaktion auf diese Art von Fragen nicht "Smarty verwenden" wäre. – da5id

+0

Was die Modifizierbarkeit angeht, behandeln Sie es wie in den C-Tagen: funktionale Dekomposition. Ich habe 300k Zeilen schlecht geschriebenen PHP durch 20k Zeilen sauberes PHP ersetzt, wo es ziemlich einfach war, eine neue paginierte Tabellenseite mit ziemlich minimalem Code zu erzeugen (zum Beispiel) – cletus

0

In diesem Fall ist es besser, separate Includes zu verwenden, da es einen deutlich lesbareren und wartbaren Code liefert. Im Allgemeinen bin ich eher dagegen, Echo-Anweisungen zu verwenden, um HTML über PHP auszugeben.

0

Ich mache meinen eigenen kleinen Controller mit nichts als PHP-Code drin. Ich habe dann ein html-include-Verzeichnis mit meinen "Ansichten" in etwa benannt: myController.myAction.htm oder myController.form.htm usw. Ich "schließe" dann die richtige Ansicht, abhängig von meiner Logik, am Ende von meinem Controller. Dadurch können sie auf alle meine Variablen zugreifen, die ich nach jeder Datenbanktransaktion und Geschäftslogik im Controller eingerichtet habe.

Meine Lieblings Sache ist, dass es sehr einfach ist und es Tonnen von Flexibilität erlaubt. Es kann auch schön sein, wenn Sie URLs neu schreiben und eine ordnungsgemäße Namenskonvention verwenden, um Ihre Controller und Ansichten zu organisieren.

0

Verwenden Smarty Vorlagen

1

Es gibt keine „richtige Weg“ dies in PHP zu tun, nur verschiedene anerkannte „good practices“ und viele mittelmäßige und einfach nur schlechte. PHP gibt Ihnen einen schönen offenen Platz, um es zu tun, aber es macht für Sie Sinn. Dies ist wohl die größte Stärke. Aber das ist auch eine große Verantwortung. Nur weil Sie können tun Sie es, aber Sie wollen nicht, dass Sie sollten.

Ich habe zahlreiche Projekte gesehen, die alles andere machen. Die derzeit verfügbaren Methoden umfassen die Trennung von Datenmanipulation, Datenzugriff und Datenpräsentation unter Verwendung eines Frameworks, üblicherweise mit einem zentralen Dispatch-Controller. Sie haben ihre eigenen Regeln, wie Sie Ihre Verzeichnisse anordnen und wo Sie die Dateien finden.

Bei einer älteren Methode wurde jede Datei als Seite behandelt. Es hatte ein paar includes an der Spitze der Datei, die die Umgebung einrichten, einschließlich Datenbank-Handler und andere Abstraktionen, sondern auch definierte Funktionen zum Erstellen der gemeinsamen Elemente einer Seite. Die Datei war in zwei Hälften geteilt: Sie hat ihre gesamte Verarbeitung und den Zugriff in der ersten Hälfte gemacht und dann ihre Ausgabe in der zweiten Hälfte aufgebaut. Eine Variante davon beinhaltet eine separate Datei für die Ausgabe. IME, das ist näher am Geist von PHP und ist einfacher, die Arbeit von Grund auf neu zu machen.

0

Ich bin neu in PHP, aber ich habe Delphi seit Jahren programmiert. Wie bei Delphi gibt es keinen Grund, warum Sie keinen einfach wartbaren PHP-Code entwickeln sollten, der Logik und Präsentation kombiniert. Ich tendiere dazu, Code-Wiederverwendbarkeit in Form von modularen Funktionselementen zu wählen, die durch Parameterübergabe verbunden sind (z. B. HTML mit eingebetteten Variablennamen als eine Art Vorlage übergeben). Außerdem ist es manchmal am besten, das Rad neu zu erfinden, um mehr über die Funktionsweise des Originalrads zu erfahren. Daher sollten Sie anstelle von Template-Software von Drittanbietern wie Smarty ein eigenes Vorlagensystem entwickeln, das auf Smarty basiert.