Design Plugin-Schnittstelle
Beat
- perl
Hallo.
Ich habe ein CMS mit Grundfunktionen.
Nun überlege ich mir, wie ich Module nur auf Bedarf einbinden kann, also eine Plugin-Schnittstelle.
Aus Sicht des Betreibers soll es so aussehen.
Er speichert Modul in im CMS Scriptordner
er trägt die einzubindenden Module ein in seine config Datei
ehfplugin=SomeModulame1
ehfplugin=SomeModulame2
Die Module sollten zudem auch nur im gewünschten Kontext in das Script eingebunden werden. Sie sollten nicht das Script bei jedem Request belasten.
also
use SomeModul1 fällt dahin.
Wie kann man das umsetzen (ausser mit require) ?
mfg Beat
Aus Sicht des Betreibers soll es so aussehen.
Er speichert Modul in im CMS Scriptordner
er trägt die einzubindenden Module ein in seine config Dateiehfplugin=SomeModulame1
ehfplugin=SomeModulame2Die Module sollten zudem auch nur im gewünschten Kontext in das Script eingebunden werden. Sie sollten nicht das Script bei jedem Request belasten.
Dazu müßte man dann Wissen, was der Kontext ist.
Ich handhabe das aktuell so, dass der Controller oder das Modul, dass das Plugin benötigt dieses mit use CMS::Plugins::EinPlugin;
einbindet. Im MainController kann ich nun in der import Funktion alle eingebundenen Plugins registrieren und beim Start der Anwendung initialisieren.
Struppi.
Aus Sicht des Betreibers soll es so aussehen.
Er speichert Modul in im CMS Scriptordner
er trägt die einzubindenden Module ein in seine config Dateiehfplugin=SomeModulame1
ehfplugin=SomeModulame2Die Module sollten zudem auch nur im gewünschten Kontext in das Script eingebunden werden. Sie sollten nicht das Script bei jedem Request belasten.
Dazu müßte man dann Wissen, was der Kontext ist.
Ich handhabe das aktuell so, dass der Controller oder das Modul, dass das Plugin benötigt dieses mit
use CMS::Plugins::EinPlugin;
einbindet. Im MainController kann ich nun in der import Funktion alle eingebundenen Plugins registrieren und beim Start der Anwendung initialisieren.
Die Idee wäre, dass ein Aufruf von
//example.org/project/some_page
eine Seite aufruft.
Ob nun mit der some_page eine einfache CMS Seite gemeint ist, oder ob
damit der Aufruf eines Plugins verbunden ist, kann das Hauptscript über die config Datei erfahren.
Das Plugin solte aber definitiv erst geladen werden, wenn dies eben auch notwendig ist. Derzeit sehe ich nur die Möglichkeit über require.
Damit kann ich zwar leben. Für Die Entwicklung würde ich ein use vorziehen (debugging).
Ich denke auch nicht, dass ich ein Plugin direkt aus dem Hauptscript aufrufen will, sondern dafür auch ein Controller-Modul verwenden will, dem das Hauptscript die notwendigen Daten übergeben kann.
Der Controller wäre sicher auch von Vorteil für die Entwicklung.
Ich weiss, dass es da noch das IF Mdoul gibt. Aber damit habe ich keinerlei Erfahrung.
Was ich allenfalls tun könnte: Das Einlesen der config Datei in die BEGIN Phase verlagern, um dann Modul Handling abhängig vo den dortigen Einträgen zu tätigen.
Aber das löst halt das Problem nicht, dass ich zu diesem Zeitpunkt den some_page Request bzw den http userinput noch nicht ausgewertet habe.
mfg Beat
Die Idee wäre, dass ein Aufruf von
//example.org/project/some_page
eine Seite aufruft.
Ob nun mit der some_page eine einfache CMS Seite gemeint ist, oder ob
damit der Aufruf eines Plugins verbunden ist, kann das Hauptscript über die config Datei erfahren.
Dann ist es aber kein Plugin, sondern ein Controller. Diese würde ich mit require einbinden. Für mich ist ein Plugin ein zusätzliche Funktionalität die der Anwendung hinzugefügt wird
Struppi.