Peter
Lt. Commander
- Registriert
- Mai 2001
- Beiträge
- 1.957
Ich arbeite momentan gerade an einem Projekt, und stehe seit zwei Tagen vor einem Problem, für das ich keine praktikable Lösung finde.
Das Programm besteht aus einem einfachen Basis-CMS mit Grundfunktionen. Zusätzliche Funktionen können ähnlich Snapins / Plugins vom Administrator für einzelne Benutzer(-gruppen) freigegeben bzw. je nach Bedarf neu in das System eingefügt oder entfernt werden.
Gelöst habe ich das über Klassen, d.h. jedes Snapin ist eine Klasse mit entsprechenden Funktionen.
Klickt der Benutzer auf einen Link, wird immer die Datei index.php aufgerufen. In der Datei wir dann ein Objekt des benötigten Plugins angelegt und die Funktion plugin->Action() aufgerufen.
Jedem Plugin stehen die Get-, Post- sowie Session-Felder zur Verfügung. In der Funktion Action() wird dann aus $_GET bzw. aus $_POST die auszuführende Aktion gelesen und klassenintern entsprechende Funktionen aufgerufen. Diese internen Funktionen generieren dann auch gleich den HTML-Code und geben diesen aus.
Dadurch, dass die Hauptdatei prinzipiell nur über die Action()-Funktion mit den Plugins kommuniziert, ist es relativ einfach Plugins einzubinden oder zu entfernen.
Letzten Freitag kam der Kunde dann auf die Idee, verschiedene Oberflächen in dem System haben zu wollen. Z.B. eine quietsche bunte für den Standard-Benutzer, eine einfache und übersichtliche für den Admin, usw.
Nun das für mich im Moment unlösbare Problem:
Die Oberflächen sind so verschieden, dass ein einfaches Austauschen der Style Sheets nicht ausreicht.
Ich müsste also irgendwie erreichen, dass ich die HTML-Code Generierung aus den Plugins herausnehme und z.B. in die index.php integriere und somit eine Trennung erreiche. Dann wäre es möglich durch ein Austauschen der index.php eine andere Oberfläche zu erzeugen. Wie aber stelle ich das an? Das Seitenlayout ist z.T. sehr komplex.
Das einzige was mir dazu einfällt ist, in dem Plugin eine Pseudo-HTML Datei zu erzeugen, und diese dann der index.php in einem string/array übergeben. In der index.php werden dann die Pseudo-Elemente durch entsprechenden HTML Code ersetzt.
Beispiel:
Das Plugin übergibt der index.php folgenden Code:
könnte zu
werden. Mit einer anderen index.php könnte daraus z.B. dies werden:
Da ich dieses Semester gerade eine Vorlesung über Parser & Co gehört habe, weiss ich wie kompliziert dies zu realisieren sein wird. Zumal dies gerade auch ein einfachstes Bsp. war.
Wenn sich schonmal einer von euch Codern mit dem Thema bechäftigt hat, oder einfach eine gute Idee hat, wie man das sonst lösen kann ... ich bin für jeden Vorschlag dankbar.
Am kommenden Freitag muss ich (sollte ich) mit einer machbaren Lösung rausrücken ....
Das Programm besteht aus einem einfachen Basis-CMS mit Grundfunktionen. Zusätzliche Funktionen können ähnlich Snapins / Plugins vom Administrator für einzelne Benutzer(-gruppen) freigegeben bzw. je nach Bedarf neu in das System eingefügt oder entfernt werden.
Gelöst habe ich das über Klassen, d.h. jedes Snapin ist eine Klasse mit entsprechenden Funktionen.
Klickt der Benutzer auf einen Link, wird immer die Datei index.php aufgerufen. In der Datei wir dann ein Objekt des benötigten Plugins angelegt und die Funktion plugin->Action() aufgerufen.
Jedem Plugin stehen die Get-, Post- sowie Session-Felder zur Verfügung. In der Funktion Action() wird dann aus $_GET bzw. aus $_POST die auszuführende Aktion gelesen und klassenintern entsprechende Funktionen aufgerufen. Diese internen Funktionen generieren dann auch gleich den HTML-Code und geben diesen aus.
Dadurch, dass die Hauptdatei prinzipiell nur über die Action()-Funktion mit den Plugins kommuniziert, ist es relativ einfach Plugins einzubinden oder zu entfernen.
Letzten Freitag kam der Kunde dann auf die Idee, verschiedene Oberflächen in dem System haben zu wollen. Z.B. eine quietsche bunte für den Standard-Benutzer, eine einfache und übersichtliche für den Admin, usw.
Nun das für mich im Moment unlösbare Problem:
Die Oberflächen sind so verschieden, dass ein einfaches Austauschen der Style Sheets nicht ausreicht.
Ich müsste also irgendwie erreichen, dass ich die HTML-Code Generierung aus den Plugins herausnehme und z.B. in die index.php integriere und somit eine Trennung erreiche. Dann wäre es möglich durch ein Austauschen der index.php eine andere Oberfläche zu erzeugen. Wie aber stelle ich das an? Das Seitenlayout ist z.T. sehr komplex.
Das einzige was mir dazu einfällt ist, in dem Plugin eine Pseudo-HTML Datei zu erzeugen, und diese dann der index.php in einem string/array übergeben. In der index.php werden dann die Pseudo-Elemente durch entsprechenden HTML Code ersetzt.
Beispiel:
Das Plugin übergibt der index.php folgenden Code:
PHP:
[group]
[header]Überschrift[/header]
[text]Hier kommt der ganze Text rein[/text]
[/group]
PHP:
<table>
<tr><th>Überschrift</th></tr>
<tr><td>Hier kommt der ganze Text rein</td></tr>
</table>
PHP:
<br><br>
<b>Überschrift</b>
<p>Hier kommt der ganze Text rein</p>
<br><br>
Wenn sich schonmal einer von euch Codern mit dem Thema bechäftigt hat, oder einfach eine gute Idee hat, wie man das sonst lösen kann ... ich bin für jeden Vorschlag dankbar.
Am kommenden Freitag muss ich (sollte ich) mit einer machbaren Lösung rausrücken ....