CMS mit Plugins

10/22/2015 20:55 Mr.Tr33#1
Hallo,

ich plane ein größeres Projekt und frage mich wie man folgendes am besten realisiert:
Ich möchte eine, sagen wir mal, CMS erstellen. Diese soll mit Plugins erweitertbar bzw. Module austauschbar sein und über ein Templatesystem verfügen.

Theretisch alles machbar. Ich frage mich hierbei nur folgendes:
Wenn ich z.B. ein Modul habe für die Registierung. Wie kann ich die Registrierung so erstellen, dass ich später z.B. die Aktivierung per z.B. SMS hinzufügen kann ohne die Registrierung selber zu bearbeiten?
Um es anders zu formulieren. Ich möchte wissen wie man es am besten bekommt Plugins in Plugins zu integrieren ohne das "Parentding" zu bearbeiten, sodass ich es z.B. updaten kann ohne die "Children" damit kaputt zu machen (ausser die ganze Strucktur wird verändert)?

Umso ausführlichere und wenigfachsprachige Antworten (einfach aus Verständlichkeits und Nachfragegründen) wie möglich würde ich mich freuen :)

MfG
Mr.Tr33
10/22/2015 21:25 tyurderi#2
sagen wir du gibts dem "per sms aktivieren"-plugin eine abhängigkeit, dass das registrieren plugin installiert sein muss

dann kannst du mit dem plugin z.B. templates von dem registrierungs plugin erweitern oder events abgreifen (die das registrieren plugin zusätzlich wirft um sich "modular" zu machen)

wäre denke ein ansatz
10/22/2015 22:46 Menan#3
Ich würde mir einen Container mit den Modulen bauen, der jeweils erweitert wird und einzelne Instanzen davon zu erstellen.

Im Beispiel dieser SMS Verifikation, würde ich das so angehen.

Es gibt die Smsveri Classe welche vom Register Modul erbt und die register Methode ersetzt. Die gleichen Methoden wie die RegisterClass aufruft, allerdings + die SMS Verifikation. Dann tauscht du auf der Seite bzw in den Einstellungen einfach den Controller aus. So dass beim Zugriff auf das Register Modul nicht mehr das Normale, sondern das "erweiterte" (vererbte) Modul geladen wird.

Hoffe man kann das verstehen :P Sonst versuch ichs nochmal in Worte zufassen.
10/22/2015 23:57 ComputerBaer#4
Dein Pluginsystem wird ja vermutlich so funktionieren, dass du die Plugins erst lädst und dabei eine "load"- oder "construct"-Methode aufrufst (oder wie auch immer du sie nennst), bevor du wirklich damit arbeitest. Später kommt dann die Seite ABC auf die Idee, die Funktion DEF von Plugin GHI aufzurufen.

Ich würde jetzt in dieser "load"-Aktion bei dem "Unterplugin" überprüfen ob das "Hauptplugin" vorhanden ist und dann über eine Funktion im Hauptplugin (z.B. RegisterVerificationMethod) das Unterplugin dort bekannt machen. Das Hauptplugin kann dir dann über Methoden wie GetVerificationMethods alle verfügbaren Methoden mitteilen oder RunVerificationMethod die gewünschte Methode ausführen.

Auf diese Art kannst du unbegrenzt viele verschiedene Verifizierungsmethoden haben, ohne das sie sich gegenseitig überschreiben und nur eine funktioniert. Vorrausgesetzt alle haben ihren eigenen eindeutigen Bezeichner, möglich wären z.B. ein Name oder eine ID.
10/23/2015 02:09 YatoDev#5
Kennt jemand eine "Best practice" dazu? würde mich auch mal interessieren
10/23/2015 04:15 Mikesch01#6
Ein "Best practice" wird es dafür nicht geben. Das ist zu komplex und von System zu System sehr unterschiedlich.
10/23/2015 05:36 YatoDev#7
Dann vielleicht einige gute ansätze? theorien?
10/23/2015 05:39 Synatex#8
Quote:
Originally Posted by »FlutterShy™ View Post
Kennt jemand eine "Best practice" dazu? würde mich auch mal interessieren
Hab genug Erfahrung in dem Bereich um es nicht zu überladen aber gleichzeitig funktionsfähig und erweiterbar zu gestalten damit es seinen Zweck erfüllt. Btw: Gilt für alles. :rolleyes:
10/23/2015 16:42 Menan#9
Du könntest dir Frameworks anschauen, welche einen Modularen Seiten aufbau ermöglichen und dir von diesen Frameworks die register Methoden.

An sich brauchst du wie gesagt nur eine Klasse, welche als Loader dient und alle deine Komponenten registriert anhand vom Filesystem oder über Einträge in der Datenbank wie auch immer.

Dann müssen Abhängigkeiten registriert werden. Zum Beispiel ist eine Registrierung nur möglich, wenn die SMSVerify-Klasse ihr okay gibt.
Hierzu kannst du aber auch Code austauschen im Prozess deiner "Modul"-Installation...
Kannst ja einfach Dateien austauschen, wenn die richtigen Berechtigungen im modul Ordner vorhanden sind. Dann würde ich dir aber empfehlen die Module anhand des FileSystems zu erkennen und zu laden.

Erst solltest du dir aber Gedanken über Dependencies innerhalb deines Projektes machen und wie du diese umsetzen möchtest. Sowie über deine Vererbungs-Hirarchie..

Im Grunde ist die Planung des ganzen aufwändiger als die Umsetzung, da die Umsetzung nach stupiden Regeln, welche du vorher in deinem Plaungsprozess festlegst, erfolgt.

Hier mal ein Google Book als Beispiel:
[Only registered and activated users can see links. Click Here To Register...]