Plugins - Technische Details
Die Verzeichnisstruktur eines eCS Plugins unterscheidet sich nicht zu einem eCMS Plugin. Mit dem eCS Plugin können Core-Libraries, DB-Data-Content und verschiedene Datei-Komponenten (Format, CSS, etc.) geliefert werden.
Mit den Unterverzeichnissen von "install_res" kann die Ziel-Site der Installation-Komponenten adressiert werden. Für ein eCS Plugin wird die folgende Verwendung der Unterverzeichnisse empfohlen.
- ecs_plugin_example
- core/
- install_res
- ecms_3_admin/
Komponenten für den eCMS Admin
- ecs_5_admin/
Komponenten für den eCS Admin
- site/
Komponenten für das Shop Frontend
- ecms_3_admin/
- installer/
- ecs_5_admin_apprights.csv
Plugin-Benutzerrechte für den eCS 5 Admin
Durch die Verwendung des Unterverzeichnis "ecs_5_admin" wird sicher gestellt, dass die eCS-Admin-Komponenten immer im eCS Admin installiert werden und es nicht von der Site-Auswahl des Users abhängt.
Ein eCS Plugin kann eigene Benutzerrechte für den eCS Admin mitbringen. Diese Benutzerrechte werden in einer CSV-Datei "ecs_5_admin_apprights.csv" direkt im Plugin-Verzeichnis abgelegt. Das Benutzerrecht-Label wird in der Spalte "appright" hinterlegt. Alle User-Rights eines Plugin sollten mit "PLUGIN_<NAME>_" beginnen.
Bei der Installation werden die Benutzerrechte importiert und neue Benutzerrechte werden dem Profile "superuser" zugeweisen.
Beispiel
appright PLUGIN_EXAMPLE_XORDER_READ PLUGIN_EXAMPLE_XORDER_CREATE ...
Um eine eigene Plugin Klasse zu erstellen, muss der Konstruktor die eCS Instanz als einzigen Parameter akzeptieren. Für eine einfache Instanziierung als eCS Plugin kann die Service-Methode ecs_pluginConfigBridge::plugin_init() genutzt werden.
Der Zugriff auf das Plugin ist über "$eCS->ecs_plugin_example->method_name()" und über "$eCMS->plugin_ecs->ecs_plugin_example->method_name()" möglich.
Beispiel:
class ecs_plugin_example { public function __construct($eCS) { // Init als eCS Plugin ecs_pluginConfigBridge::plugin_init($this, $eCS); } }
Die Methode ecs_pluginConfigBridge::plugin_init() erweitert die Plugin Klassen Instanz um folgende Instanzvariablen. Damit dies möglich ist, dürfen die Instanzvariablen nicht als private oder protected deklariert sein.
// eCS Pointer $this->eCS = object; // Pluginname $this->pluginname = string; // Plugin-Config
Für die Verwaltung des Plugins durch den eCMS-Package-Manager sind einige Verwaltungsmethoden erforderlich. Für eine einfache Integration kann die Klasse ecs_pluginConfigBridge genutzt werden.
class ecs_plugin_example { public function __construct($eCS) { } public static function plugin_config_factory ($eCMS) { return ecs_pluginConfigBridge::plugin_config_factory($eCMS, __CLASS__); } }
Die Installer-Scripte (Base & Updates) bieten die Möglichkeit
- neue DB-Tabellen oder Zusatzfelder in vorhandene DB-Tabellen anzulegen
- eigene Datensätze und Einstellungen (z.B. Comproc, Counter, Kampagnen, Formcheck-Settings, etc.) zu erstellen
- Event-Action zu registrieren
- Verzeichnisse oder Dateien anzulegen
- und vieles mehr...
Über den Pointer $this->eCMS ist in den Installer-Scripten der Zugriff auf den eCMS-Amin möglich.
Das Shop-Frontend eCMS (ausgewählte Site des Users) ist über $this->eCMS->plugin_siteControl verfügbar. Der Zugriff auf die eCS-Komponenten (z.B. Comproc, Formcheck) ist über den Pointer $this->eCMS->plugin_siteControl->plugin_ecs in den Installern möglich.
Der Zugriff auf den eCS Admin eCMS ist über $this->eCMS->packageManager->ecms_getObject('ecs_5_admin') gegeben.
Das folgende Beispiel zeigt den Zugriff auf die drei eCMS DB. In jeder eCMS DB wird ein Counter angelegt:
// erstellt Counter "ecs_plugin_example" im eCMS Admin $this->eCMS->counter->counter_checkCreateGet( 'cnt_label'=>'ecs_plugin_example', 'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}', ) ); // erstellt Counter "ecs_plugin_example" im Shop-Frontend (aktive Site) $this->eCMS->plugin_siteControl->counter->counter_checkCreateGet( 'cnt_label'=>'ecs_plugin_example', 'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}', ) ); // erstellt Counter "ecs_plugin_example" im eCS Admin $this->eCMS->packageManager->ecms_getObject('ecs_5_admin')->counter->counter_checkCreateGet( 'cnt_label'=>'ecs_plugin_example', 'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}', ) );