Hallo!
> Ich stehe momentan vor einem fundamentalen Problem. In den letzten
> Tagen ist mein eigenes kleines CMS fertig geworden und merke jetzt,
> dass ich schon bei der Planung einen grundlegenden Fehler gemacht
> habe.
Ärgerlich. Aber immerhin hast du geplant.
> Ein CMS sollte (meiner Meinung nach) mittels Modulen aufgebaut
> sein (bei mir nicht der Fall). Dabei muss es möglich sein "per
> Mausklick" Module zu aktivieren bzw. deaktivieren.
Da kann ich dir zustimmen, wenn die Module wirklich unabhängig
voneinander sind. (Wird dies nicht sogar schon durch die Bedeutung des
Wortes Modul impliziert?!).
> Ich kann und will das Rad nicht neu erfinden und suche
> daher händerringend nach Informationsquellen und Ratschlägen,
> wie man eine modulbasierte Programmlogik realisiert.
Ich kann dir glaube ich (ich bin aber auch erst Anfänger) ein paar
Ratschläge geben:
Schreibe dein Programm objektorientiert.
In JAVA würde ich jetzt einen Observer benutzen, bei dem sich die Module
registrieren. In PHP musst du das AFAIK anders lösen.
Ich gehe mal davon aus, dass ein Modul hier durch mehrere Klassen gegeben
ist. Folglich brauchst du eine Art Schnittstelle für das Modul.
Diese Schnittstelle sollte in allen Modulen (sehr) ähnlich aufgebaut
sein, damit dein Hauptprogramm allgemein auf das Modul zugreifen kann.
Eine solche Schnittstelle könnte z.B. in Form von verschiedenen
Funktionen einer Interface-Klasse realisiert sein.
Diese Funktionen könnten dann z.B. lauten:
doIt() - Die Standardarbeit, die das Modul verrichtet
getOutput() - Die Ausgabe des Moduls wird weitergegeben
getStatus() - Eventuelle Statusmeldungen (ich denke das ist optional)
...
..
Je nachdem wie komplex die Module (bzw. das simpelste Modul) sein soll,
werden eben entsprechend weitere Funktionen implementiert.
Extras müssen dann über Sonderfälle im Hauptprogramm benutzt werden. D.h.
alles was nicht Standard ist, muss über Ausnahmen (if etc.) geregelt
werden.
Falls zwei Module dann doch irgendwie voneinander abhängig sind, könntest
du ja ein weiteres Interface schreiben, dass für die Kommunikation
zwischen den Modulen sorgt. Das wäre dann natürlich schon wesentlich
spezieller (auf die Situation angepasst).
Ich weiß jetzt nicht, was genau die mit aktivieren/deaktivieren von
Modulen meinst, aber ich tippe auf diesen Gedankengang:
Es werden alle Module aufgelistet, die gefunden wurden.
Ob sie eingebunden werden, hängt von einem Attribut ab (isActive).
Falls das Attribut false ist, arbeitet das Modul nicht und hat somit auch
keine Ausgaben. Falls das Attribut true ist, arbeitet das Modul, kann
evtl. interagieren und hat auch Ausgaben.
Man könnte das so lösen, dass es einen "Module suchen" Bereich gibt, in
dem eben alle Module gesucht werden und deren Existenz irgendwo
gespeichert wird. Standardmäßig ist jedes neu gefundene Modul aktiv.
Jedes Modul bekommt einen Status isActive, der sich in diesem Bereich des
CMS' einstellen lässt.
(Sogar diesen 'Bereich' könntest du als Modul auffassen. Einmal benutzt
kann es deaktiviert werden. Aktivieren lässt es sich dann eben nur noch
über direkten Zugriff auf eine Datei oder sonstirgendwie, aber das sind
jetzt unnötige Details)
Wie gesagt, ich kenne mich selbst nicht besonders gut auf diesem Gebiet
aus. Ich habe einfach mal so ein paar Ideen aufgeschrieben.
Vielleicht hilft's!?
herojoker