Einzelnen Beitrag anzeigen

Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#1

Sinnvolle Anwendung eines Template-Systems

  Alt 26. Nov 2008, 19:27
Hi DPler!

Ich bin nun mittlerweile seit einiger Zeit dabei, eine Webseite mal von Grund auf sauber zu erstellen. Ich habe schon mehrere Wochen zusammen mit einem Freund verbracht, um dies alles zu planen und die anzuwendenden Patterns zu besprechen. Nun hänge ich hier vor einem kleinen Problem, bei dem ich gerne mal eure Meinung hören möchte.

Wir haben unser Projekt nach dem MVC-Model gestaltet. Dabei haben wir die Möglichkeit, unsere Templates ähnlich zu folgendem Code aufzurufen.

Code:
$view = new View("mein_temaplte");
$view->assign("ueberschrift", "Hello World!");
$view->display();
Das hat bisher auch immer gereicht, denn wir haben noch kein Design eingebaut und bisher nur Debug-Code gehabt, um den Core zu testen. Jetzt ist es allerdings so weit, dass ich doch mal ein Design einbauen möchte und langsam aber sicher mal die 'sichtbaren' Dinge programmieren will. Dabei stellt sich jetzt bzgl. der Views ein Problem: Wie benutze ich diese, wenn ich auf jeder Seite einen Header und einen Footer haben möchte, aber auch die Wahl haben will, ob die rechte oder linke Spalte der Webseite eingeblendet werden soll? Dazu bisher erstmal folgende, sehr simple Lösung:

Code:
$view = new View("main");
$rechte_spalte = new View("rechts");
$linke_spalte = new View("links");
$content = new View("content)";
$footer = new View("footer");
$header = new View("header");

$content->assign("dies_und_das", "Der Content eben. ;-) ");

$view->assign("rechts", $rechte_spalte->display(false));
$view->assign("links", $linke_spalte->display(false));
$view->assign("footer", $footer->display(false));
$view->assign("header", $header->display(false));
$view->assign("content", $content->display(false));

$view->display();
Wie man sieht: Viel Code. Kleine Erklärung: display(false) gibt die Ausgabe des Templates nicht mit echo aus, sondern mit return zurück. display(true) oder display() hingegen benutzt echo.

Was mich daran enorm stört, ist, dass das Ganze in ein ewig Copy&Paste-Gemetzel ausarten wird. Ich habe eigentlich keine Lust für jeden Controller, erstmal diese ganzen Zeilen zu kopieren und anschließend dort reinzupasten. Jetzt frage ich mich eben: Wie mache ich das richtig? Ich will die Möglichkeit haben, verschiedene Teile des Layouts auszublenden: Footer, Header, Spalten, usw. Wie macht ihr sowas? Habt ihr da Ideen und Vorschläge?

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat