PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dynamischer Content bei Template-Engine und PHP


Gast
2008-12-22, 17:13:46
Hallo ihr,

also erst gestern kam ich auf den Drichter, dass man HTML-Templates in die Logik reinläd, und nicht wie ich es bisher gemacht habe, die Logik in die HTML-Seite inkludiert - also praktisch genau andersrum.
Soweit, so gut, das funktioniert auch ganz prima.

Jedoch bin ich gerade am Überlegen, wie man den "Hauptcontent" der Seite dynamisch läd. Früher hatte ich im HTML an dieser Stelle ein Switch($_get['site']) stehen, welches überprüft hat, obs die aufgeforderte Seite gibt und dann inkludiert hat.

Von jetzt an im Text:
Logik = index.php

Um der Templatesache weiter treu zu bleiben, steht an dieser Stelle im Template jetzt aber ein <?=content ?>. D.h. die Index.php, welche das Template am Ende reinläd und mit Daten versorgt, müsste die Aufgabe übernehmen, den richtigen Content auszuwählen und zu laden.

Nehmen wir mal an, es wird index.php?site=guestbook aufgerufen. Ich könnte ja den Switch nun hier in der index.php einbauen und rausfinden, dass Guestbook existiert und es anschliessend... ja was denn nun anschliessend?

Denn das Gästebuch hat ja wiederrum sein eigenes Template UND seine eigene Logik. Brauche ich nun eine Template-Engine in der Template-Engine?

Oder inkludiere ich in die index.php die Logik des Gästebuches und weise der Variablen $content (welche ja später im Template an besagter Stelle steht) per readfile() das HTML-Template des Gästebuches zu?

Ich hoffe, ich habe mich nicht zu umständlich ausgedrückt, sonst erklär ichs nochmal neu.

PS: ihr werdet euch fragen, wo da die Template-"Engine" nun ist, ist doch nichts weiter als simples PHP. Richtig aber mit PHP alleine kann man die meisten Templatesachen ja auch ohne 3rd Party Script einfach lösen, das reicht mir. Im Prinzip ist das von mir beschriebene ja eine kleine Template-Engine.

Gruß

Kinman
2008-12-22, 18:32:26
Eine Template Engine trennt Logik von (in diesem Fall) HTML. D.h. Du hast Deine "Logik"-Dateien (also index.php, Gästebuch, etc.) und Deine HTML Dateien.
Deine index ladet natürlich die Logikdateien der aufgerufenen Seite (z.B. Gästebuch) und diese Öffnet dann die Template Dateien und verarbeitet diese.

http://www.forum-3dcenter.org/vbulletin/showthread.php?t=283824

mfg Kinman

Gast
2008-12-22, 18:46:55
Okay, danke schonmal.
Also es muss ja eine Schnittstelle zwischen Logik und HTML geben, das ist in meinem Fall die index.php?

Jetzt gibt es 2 Möglichkeiten, deine Erklärung kann man auf 2 verschiedene Arten interpretieren.

1. Die index.php läd getrennt die Logik UND das Template der aufgerufenen Seite und "verschmelzt" diese anschließend vor dem Ausgeben.

2. Die index.php läd die Logik der aufgerufenen Seite, und genau diese Logik (also die der aufgerufenen Seite, nicht die ursprüngliche der index.php) läd wiederrum das Template.

Was bevorzugt man, Geschmackssache? Eigentlich würde ja beides gleich gut gehen, oder hab ich einen Denkfehler gemacht?

robobimbo
2008-12-22, 18:57:20
Aus der klassischen MVC Sicht sieht es so aus:

Model - Das Datenmodell und die Abbildung der Logik
Controller - Nimmt die Daten aus dem Modell und schiebt sie ins View
View - Der View, Präsentiert die Daten

Wenn Du sowas fixfertiges verwenden willst (ich weiss, lt. Deinem ersten Post nicht) schau dir mal CodeIgniter an - find ich ganz nett :)

www.codeigniter.com

Gast
2008-12-22, 19:07:31
Das heißt also:

Meine index.php ist der Controller
Das Gästebuch-Template das View
Die Gästebuch-Logik das Model?

Wenn man deine Sätze mal konkret betrachtet:

"Controller - Nimmt die Daten aus dem Modell und schiebt sie ins View"

-> d.h. die index.php macht sowas wie include('gb_logik.php'), oder wie genau nimmt sie die Daten?

Dann wären ie Daten schonmal im Controller, aber wie verschiebt man sie ins View? Wenn ich das Temlate auch noch in die index.php inkludiere, dann würde das zwar gehen, dann müsste der Satz aber eher lauten:

"Controller - Nimmt die Daten aus dem Modell und nimmt das View und kombiniert"

Gast
2008-12-22, 19:18:42
Nachtrag zu Post 5:

Warum das ganze noch nicht in den Kopf will: die Templates sind passiv und können ja nichts anzeigen, sondern _werden_ angezeigt, und zwar von der index.php, welche ja eigentlich der Controller ist, dachte ich... Da im Endeffekt aber ja die index.php präsentiert, müsste sie und die Templates als Einheit das View bilden und der Controller muss irgendwie ausgelagert werden...

Hach, jetzt hast du schon damit angefangen, jetzt will ichs auch wissen ;)

Kinman
2008-12-23, 08:47:42
View = der ausgegebene HTML Code. Also im Prinzip die Funktion/Klasse, die Deine Template einliest, parst und ausgibt.

Model = Die Daten (Datenbank, etc.)
Controlloer = Deine Logik wo auch die index dazugehört

Du musst die index.php und ihre inkludierenden Dateien als eine Einheit sehen.

Bei meiner Template Engine siehts so aus:

index.php
Instanziert die Klasse für den Datenbankzugriff
Instanziert die Klasse für die Template Engine
Bindet Logik ein
Ruft zum Schluss die Ausgabe der Template Engine auf

Logik
Übergibt Template Name + zu ersetzende Werte an die Templateengine

Templates
Reine HTML Dateien mit Anker und Platzhalter


mfg Kinman