Plugins - Technische Details

Der Artikel beschreibt die eCS spezifischen Ergänzungen zu Plugins und deren Installation.

Einleitung

Die Basis für die nachfolgenden Ausführungen ist Artikel eCMS Plugins - Technische Details.

 

Site Adressierung

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

    • 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.

 

Benutzerrechte

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

  1. appright
  2. PLUGIN_EXAMPLE_XORDER_READ
  3. PLUGIN_EXAMPLE_XORDER_CREATE
  4. ...

 

Plugin-Class

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:

  1. class ecs_plugin_example
  2. {
  3.     public function __construct($eCS)
  4.     {
  5.         // Init als eCS Plugin
  6.         ecs_pluginConfigBridge::plugin_init($this, $eCS);
  7.     }
  8. }

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.

  1. // eCS Pointer
  2. $this->eCS = object;
  3.  
  4. // Pluginname
  5. $this->pluginname = string;
  6.  
  7. // Plugin-Config
  8. $this->Config = array;

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.

  1. class ecs_plugin_example
  2. {
  3.     public function __construct($eCS) { }
  4.  
  5.     public static function plugin_config_factory ($eCMS)
  6.     {
  7.         return ecs_pluginConfigBridge::plugin_config_factory($eCMS, __CLASS__);
  8.     }
  9. }

 

Installer

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:

  1. // erstellt Counter "ecs_plugin_example" im eCMS Admin
  2. $this->eCMS->counter->counter_checkCreateGet(
  3.         array(
  4.             'cnt_label'=>'ecs_plugin_example',
  5.             'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}',
  6.         )
  7.     );
  8.  
  9. // erstellt Counter "ecs_plugin_example" im Shop-Frontend (aktive Site)
  10. $this->eCMS->plugin_siteControl->counter->counter_checkCreateGet(
  11.         array(
  12.                 'cnt_label'=>'ecs_plugin_example',
  13.                 'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}',
  14.         )
  15.     );
  16.  
  17. // erstellt Counter "ecs_plugin_example" im eCS Admin
  18. $this->eCMS->packageManager->ecms_getObject('ecs_5_admin')->counter->counter_checkCreateGet(
  19.         array(
  20.                 'cnt_label'=>'ecs_plugin_example',
  21.                 'cnt_formatstring'=>'EXC-%c[cnt]{pad:8,0,left}',
  22.         )
  23.     );