![]() |
#1 | ||||||||||||||||||||||||
be forever curious
|
![]()
MVC? Was ist das denn? MVC steht für das Designpattern Model View Control, welches beschreibt, wie eine Anwendung praktischerweise in 3 Komponenten aufgeteilt werden kann (und evtl auch sollte). Die 3 Komponenten sind dabei:
MVC2 im Detail MVC2 ist eine einfachere Variante des MVC(3), das oben beschrieben wurde. Hierbei werden Model und Control zusammengefasst, sodass nur noch 2 Komponenten übrig bleiben. In Webanwendungen mit DB-Anbindung ist es oft schwer, diese Trennung noch zu erkennen, da das Model fast immer in der Datenbank liegt und somit schon per se gekapselt ist. MVC2 mit Frontcontroller in PHP Der grundlegende Ansatz für MVC2 ist (meiner Meinung nach) das Benutzen eines Templatesystems. So kann effizient eine Trennung von View und Model/Control bzw. Design und Logik erreicht werden. Kommen wir nun zum Frontcontroller. Will man eine PHP-Anwendung schreiben, bieten sich grundlegend 2 Varianten an, um beliebig viele Seiten anlegen zu können.
- Erstellen einer Sitemap Für den Frontcontroller ist es zwingend notwendig, eine definierte Liste von Seiten zu haben, die die Anwendung ausmacht. Dies wäre eine sogenannte White List, da nur Seiten ausgeliefert werden, die in dieser Liste stehen. Es gibt auch andere Ansätze, wo diese Liste nicht existiert, sondern über die Existenz einer einzelnen Datei geprüft wird, ob die entsprechende Seite verfügbar ist, aber ich halte diese Variante für äußerst problematisch, da sie im Gegensatz zur White List wesentlich mehr Risiken birgt. Die Sitemap kann nun in verschiedenen Formaten gespeichert sein.
Ein Beispiel meiner XML-Variante: Code:
Ein kleiner Einschub noch zur Performance: Man kann das Parsen der Sitemap vereinfachen, indem man diese cachet. Beim Einlesen wird geprüft, ob eine Cache-Datei für die Sitemap vorliegt und dann dieses Dateidatum mit dem der Sitemap verglichen. Ist das Datum der Sitemap neuer, wird neu geparset, ansonsten die gecachete Version eingelesen. Dafür bieten sich die Funktionen serialize()/unserialize() an, womit man ein Array in einen String umwandeln und vice versa. - Verarbeiten einer Anfrage Nun haben wir die Sitemap vorliegen und müssen eingehende Anfragen verabeiten können. Dazu wird die angefragte Seite aus dem Request ausgelesen und mit der Sitemap verglichen: PHP-Code:
Ich für meinen Teil habe dies so realisiert, dass in einem /bin-Ordner alle PHP-Skripte der einzelnen Seiten liegen. Diese sind exakt so benannt, wie der Schlüssel der aufzurufenden Seiten. Als Beispiel würde bei ?site=home die Datei /bin/home.php inkludiert. Ebenso heisst das Template analog /templates/home.tpl. Dadurch reduziert sich der PHP-Code im Frontcontroller auf: PHP-Code:
Codebeispiel anhand von Smarty Für Smarty (und andere Templatesystems genauso) braucht es für die Seite ein Haupttemplate (beispiel.tpl), das exemplarisch wie folgt aussieht: HTML-Code:
PHP-Code:
PHP-Code:
HTML-Code:
Ich hoffe, Ihr könnt damit etwas anfangen und bin auf Kritik/Anregungen/Verbesserungen gespannt. ![]() @theHacker: Wenn's für gut befunden wird, könntest Du's dann ins FAQ-Forum verschieben? Ich darf da ja nicht posten. ![]() ![]() PS: Ich geh nun erstmal was essen. Da tippert man ja doch länger dran als ich dachte... ![]()
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse Geändert von tleilax (12.08.2006 um 12:01:11 Uhr) |
||||||||||||||||||||||||
![]() |
![]() |
![]() |
#2 | |
sieht vor lauter Ads
den Content nicht mehr |
![]() Zitat:
![]() ![]() Das mit der XML-Sitemap gefällt mir. Das muss ich irgendwann mal aufgreifen ![]() Bei meiner Sitemap erkennt man schön, dass die XML-Struktur da sehr gut passt. Da könnte ich dann z.B. auch noch Infos wie das Symbol etc. rein hauen. NEU
![]() ![]() ![]() – It's just a glitch in the Matrix – OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team |
|
![]() |
![]() |
![]() |
#3 | ||||
return void
|
![]() Zitat:
So bietet zB. das Zend-Framework die Klasse Zend_Cache, welche das Parsen des XML-Files Cachen kann und sollte die Datei geändert werden (das Framework merkt dies von alleine) wird die Datei sofort neu eingelesen und gecached, somit lässt sich die Sitemap gut im XML-Format speichern und trotzdem wird die Sitemap sehr effizient verwaltet und ausgeführt. Ein Beispiel: PHP-Code:
|
||||
![]() |
![]() |
![]() |
Anzeige |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
![]() |
||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
[PHP, mod_rewrite] Effektiver Frontcontroller mit mod_rewrite | theHacker | Programmierung | 9 | 05.08.2006 00:19:07 |