Versionen von Plugins.Implementierung

Unwichtige Korrekturen ausblenden - Änderungen im Wiki Quelltext

 
 
01.04.2011 23:37 Uhr von tthelen -
Zeilen 1-2 hinzugefügt:

(:redirect 'http://docs.studip.de/develop/Plugins/Implementierung':)

 
 
13.09.2009 22:55 Uhr von eludwig -
Zeilen 2-5 bearbeitet:

Als Vorbemerkung soll noch einmal ausdrücklich darauf hingewiesen werden, dass PHP zumindest in Version 4, die Stud.IP voraussetzt, keine Namensräume unterstützt. Daher müssen Klasse eindeutig benannt werden und alle Funktionen, die für Plugins verwendet werden, sollten in Klassen gekapselt sein.

Vor der Implementierung eines Plugins sollte zunächst bekannt sein, an welchen Stellen im System ein solches Plugin verlinkt sein soll und wer hierauf Zugriff besitzt. Hieraus sollte dann eine Wahl auf einen der drei Typen bzw. Basisklassen? resultieren.

geändert in:

(:toc:)

Vor der Implementierung eines Plugins sollte zunächst bekannt sein, an welchen Stellen im System ein solches Plugin verlinkt sein soll und wer hierauf Zugriff besitzt. Hieraus sollte dann eine Wahl auf einen der fünf Typen bzw. Basisklassen? resultieren.

Zeile 8 gelöscht:
Zeilen 11-13 bearbeitet:
   function __construct(){
	parent::__construct();
   }
geändert in:
    function __construct(){
        parent::__construct();
        […]
    }
Zeilen 18-21 bearbeitet:

Im obigen Beispiel wird von der Klasse AbstractStudIPAdministrationPlugin abgeleitet. Das Plugin erhält dadurch automatisch einige Attribute und Methoden und wird so von der PluginEngine automatisch in den Administrationsbereich von Stud.IP eingebunden. Dies geschieht allerdings erst, wenn dem Plugin auch ein entsprechendes Navigationsobjekt zugewiesen wurde. Die abstrakte Oberklasse verfügt nämlich über kein solches Navigationsobjekt. Dies ist auch bei den übrigen Basisklassen der Fall.

die Verlinkung / die Navigation

geändert in:

Im obigen Beispiel wird von der Klasse AbstractStudIPAdministrationPlugin abgeleitet. Das Plugin erhält dadurch automatisch einige Attribute und Methoden und wird so von der Plugin-Schnittstelle automatisch in den Administrationsbereich von Stud.IP eingebunden. Dies geschieht allerdings erst, wenn dem Plugin auch ein entsprechendes Navigationsobjekt zugewiesen wurde. Die abstrakte Oberklasse verfügt nämlich über kein solches Navigationsobjekt. Dies ist auch bei den übrigen Basisklassen der Fall.

Die Navigation

Zeile 29 hinzugefügt:
Zeilen 32-38 bearbeitet:

Administrationsplugins weisen zusätzlich die Besonderheit auf, dass sie über eine TopNavigation verfügen können, die dazu führt, dass das Plugin auch auf der Startseite des Administrators angezeigt wird.

Systemplugins weisen die Besonderheit auf, dass sie alternativ über überhaupt keine Navigation verfügen können. In diesem Fall sollte dann aber ein BackgroundTask vorhanden sein. D.h. Systemplugins können alternativ ohne Navigation als Hintergrund-Job laufen. Sie werden dann bei jeder Aktualisierung der Seite ausgeführt. Dies eignet sich bspw. um ein Benutzertracking durchzuführen.

Bei Standardplugins kann es zusätzlich eine Subnavigation geben. Dies sind die in Veranstaltungen und Einrichtungen innerhalb von Stud.IP üblichen Bottomkats bzw. Links unterhalb eines Karteireiters.

Icons

geändert in:
  • Administrationsplugins weisen zusätzlich die Besonderheit auf, dass sie über eine TopNavigation verfügen können, die dazu führt, dass das Plugin auch auf der Startseite des Administrators angezeigt wird.
  • Systemplugins weisen die Besonderheit auf, dass sie alternativ über überhaupt keine Navigation verfügen können. In diesem Fall sollte dann aber ein BackgroundTask vorhanden sein. D.h. Systemplugins können alternativ ohne Navigation als Hintergrund-Job laufen. Sie werden dann bei jeder Aktualisierung der Seite ausgeführt. Dies eignet sich bspw. um ein Benutzertracking durchzuführen.
  • Bei Standardplugins kann es zusätzlich eine Subnavigation geben. Dies sind die in Veranstaltungen und Einrichtungen innerhalb von Stud.IP üblichen Bottomkats bzw. Links unterhalb eines Karteireiters.

Icons

Zeile 45 bearbeitet:

Grunddaten

geändert in:

Grunddaten

Zeile 48 bearbeitet:

Aufruf des Plugins durch die PluginEngine

geändert in:

Aufruf des Plugins durch die PluginEngine

Zeile 64 hinzugefügt:
Zeile 83 hinzugefügt:
Zeilen 93-100 bearbeitet:

Folgende Methoden müssen für Plugins implementiert werden, die eine Ansicht erzeugen.

  • actionShow:
    Erzeugt die Ansicht des Plugins

Daneben gibt es weitere Methoden, die optional implementiert werden können.

  • initialize:
    Wird von der PluginEngine automatisch vor weiteren Aufrufen aufgerufen, sofern das Plugin diese Methode implementiert.

Zugriff auf weitere Ressourcen im Plugin

geändert in:

Zugriff auf weitere Ressourcen im Plugin

Zeilen 100-103 bearbeitet:

Ausgangspunkt für eigene Entwicklungen

Als Ausgangspunkt für eigene Entwicklungen können die bereitgestellten Basis-Plugins dienen. Diese erzeugen nur einen Menüeintrag und ansonsten einen leeren Content-Bereich.

Zudem sollten folgende Klassen genauer angesehen werden:

geändert in:

Ausgangspunkt für eigene Entwicklungen

Als Ausgangspunkt für eigene Entwicklungen können die bereitgestellten Beispiel-Plugins dienen. Diese erzeugen nur einen Menüeintrag und ansonsten einen leeren Content-Bereich. Zudem sollten folgende Klassen genauer angesehen werden:

 
 
13.09.2009 22:39 Uhr von eludwig -
Zeile 69 bearbeitet:

function importUserFromLDAP(){

geändert in:

function actionImportUserFromLDAP(){

Zeile 73 bearbeitet:

function searchLDAP(){

geändert in:

function actionSearchLDAP(){

 
 
13.09.2009 22:38 Uhr von eludwig -
Zeilen 11-12 bearbeitet:
   function UserAdministrationPlugin(){
		parent::AbstractStudIPAdministrationPlugin();
geändert in:
   function __construct(){
	parent::__construct();
Zeilen 50-51 bearbeitet:

Zunächst einmal benutzt die Plugin-Engine die Informationen aus der Datenbank, um Plugins ins System zu laden. Anschließend wird jedes Plugin nach der Navigation gefragt und dann entsprechend im System verlinkt. Wird nun ein entsprechender Link durch den Nutzer angeklickt, so lädt die Plugin-Engine das angeforderte Plugin und fügt je nach Ausprägung (Standard, System, Administration) des Plugins einen entsprechenden Kopf über dem Plugin-Ausgabebereich ein und ruft dann die show-Methode des Plugins auf. Danach wird die Seite über einen entsprechenden Abschluss beendet.

geändert in:

Zunächst einmal benutzt die Plugin-Engine die Informationen aus der Datenbank, um Plugins ins System zu laden. Anschließend wird jedes Plugin nach der Navigation gefragt und dann entsprechend im System verlinkt. Wird nun ein entsprechender Link durch den Nutzer angeklickt, so lädt die Plugin-Engine das angeforderte Plugin und fügt je nach Ausprägung (Standard, System, Administration) des Plugins einen entsprechenden Kopf über dem Plugin-Ausgabebereich ein und ruft dann die actionShow-Methode des Plugins auf. Danach wird die Seite über einen entsprechenden Abschluss beendet.

Zeile 54 bearbeitet:

Das Plugin sollte also in jedem Fall über eine show-Methode verfügen, da diese der Haupteinstiegspunkt für die Plugin-Engine ist. Innerhalb dieser show-Methode sollte das Plugin den Request verarbeiten und eine Ausgabe liefern. Sinnvoll ist hier auch die Unterscheidung in mehrere Schichten nach dem Model-View-Controller-Modell (MVC).

geändert in:

Das Plugin sollte also in jedem Fall über eine actionShow-Methode verfügen, da diese der Haupteinstiegspunkt für die Plugin-Engine ist. Innerhalb dieser actionShow-Methode sollte das Plugin den Request verarbeiten und eine Ausgabe liefern. Sinnvoll ist hier auch die Unterscheidung in mehrere Schichten nach dem Model-View-Controller-Modell (MVC).

Zeilen 60-61 bearbeitet:

Das Beispielplugin führt in seiner show-Funktion keinerlei Unterscheidung aufgrund des eingehenden Requests durch. Statt dessen wird zunächst eine Session-Variable gelöscht und dann nur der View instanziiert und dort die Anzeige eines Suchformulars aufgerufen.

geändert in:

Das Beispielplugin führt in seiner actionShow-Funktion keinerlei Unterscheidung aufgrund des eingehenden Requests durch. Statt dessen wird zunächst eine Session-Variable gelöscht und dann nur der View instanziiert und dort die Anzeige eines Suchformulars aufgerufen.

Zeilen 64-65 bearbeitet:

function show(){

	unset($_SESSION["ldapresults"]);
geändert in:

function actionShow(){

Zeilen 78-79 bearbeitet:

Weitere Funktionalität des Controllers steckt in den weiteren angedeuteten Methoden. Die Aufteilung in verschiedene Methoden verbessert hier die Übersichtlichkeit und Wartbarkeit des Codes. Statt der Aufteilung in verschiedene Methoden könnte sich auch der gesamte Code zur Kontrolle innerhalb der show-Methode verbergen. Dies wäre jedoch nicht sehr übersichtlicht. Trotzdem kann dies bei einigen Fallunterscheidungen sinnvoll sein.

geändert in:

Weitere Funktionalität des Controllers steckt in den weiteren angedeuteten Methoden. Die Aufteilung in verschiedene Methoden verbessert hier die Übersichtlichkeit und Wartbarkeit des Codes. Statt der Aufteilung in verschiedene Methoden könnte sich auch der gesamte Code zur Kontrolle innerhalb der actionShow-Methode verbergen. Dies wäre jedoch nicht sehr übersichtlicht. Trotzdem kann dies bei einigen Fallunterscheidungen sinnvoll sein.

Zeilen 82-90 bearbeitet:

function showLDAPSearchForm($nachname="",$email="",$name="",$fuzzy=false){

	StudIPTemplateEngine::makeContentHeadline(_("Suche im LDAP"));
		?>
	<form method="POST" action="

<?= PluginEngine::getLink($this->pluginref,array(),"searchLDAP")?>">

		…
	</form>		
		<?
	}
geändert in:

function actionShowLDAPSearchForm($nachname="",$email="",$name="",$fuzzy=false){

	echo '<form method="POST" action="'.PluginEngine::getLink($this->pluginref,array(),"searchLDAP").'">';
	[…]

}

Zeilen 88-91 bearbeitet:

Zur Erzeugung des Action-Links eines Formulars sehen wir den Aufruf der statischen Methode getLink innerhalb der PluginEngine-Klasse. Die PluginEngine-Klasse stellt einige statische Methoden bereit, die für die Entwicklung von Plugins nötig sind. Genaueres dazu hier?.

Ebenfalls ist im Code-Ausschnitt zu sehen, dass die Klasse StudIPTemplateEngine über statische Funktionen verfügt, die zur Darstellung gedacht sind. Genaueres dazu hier?.

geändert in:

Zur Erzeugung des Action-Links eines Formulars sehen wir den Aufruf der statischen Methode getLink innerhalb der PluginEngine-Klasse.

Zeilen 91-92 bearbeitet:
  • show:
    Erzeugt die Ansicht des Plugins
geändert in:
  • actionShow:
    Erzeugt die Ansicht des Plugins
Zeilen 95-96 bearbeitet:
  • prepareUninstallation:
    Wird von der PluginEngine automatisch unmittelbar vor dem Löschen des Plugins aufgerufen. Das Plugin sollte hierin von ihm angelegte Tabellen etc. löschen.
geändert in:
Zeile 107 gelöscht:
  • plugins/engine/StudIPTemplateEngine.class.php
Zeilen 111-113 bearbeitet:
  • plugins/core/AbstractStudIPSystemPlugin.class.php
geändert in:
  • plugins/core/AbstractStudIPSystemPlugin.class.php
 
 
19.12.2008 14:22 Uhr von eludwig -
Zeilen 104-110 hinzugefügt:

Zugriff auf weitere Ressourcen im Plugin

Gelegentlich kann es notwendig sein, auf weitere Dateien im Plugin-Verzeichnis zuzugreifen, z.B. bei Verwendung von Templates oder Konfigurationsdateien im Plugin oder falls das Plugin eigene Bilder oder Stylesheets mitbringt. Hierfür gibt es zwei Hilfsmethoden in der Plugin-Klasse:

  • getPluginPath():
    liefert einen Dateisystempfad zum Verzeichnis des Plugins, den man serverseitig verwenden kann, um Ressourcen zu erreichen
  • getPluginURL():
    liefert eine absolute URL zum Verzeichnis des Plugins, falls man URLs zum Zugriff auf eigene Bilder, CSS-Dateien o.ä. konstruieren möchte
 
 
06.11.2008 23:03 Uhr von spieckermann -
Zeile 9 bearbeitet:

[@<?php

geändert in:

(:source lang=php:)[@

Zeilen 15-17 bearbeitet:

?>@]

geändert in:

@]

Zeile 23 bearbeitet:

[@

geändert in:

(:source lang=php:)[@

Zeile 40 bearbeitet:

[@

geändert in:

(:source lang=php:)[@

Zeile 63 bearbeitet:

[@

geändert in:

(:source lang=php:)[@

Zeile 82 bearbeitet:

[@

geändert in:

(:source lang=php:)[@

 
 
28.03.2007 11:04 Uhr von nimuelle -
Zeile 82 bearbeitet:

(:code:)

geändert in:

[@

Zeilen 92-97 bearbeitet:

(:/code:)

Zur Erzeugung des Action-Links eines Formulars sehen wir den Aufruf der statischen Methode getLink innerhalb der PluginEngine-Klasse. Die PluginEngine-Klasse stellt einige statische Methoden bereit, die für die Entwicklung von Plugins nötig sind. Genaueres dazu hier?.

Ebenfalls ist im Code-Ausschnitt zu sehen, dass die Klasse StudIPTemplateEngine über statische Funktionen verfügt, die zur Darstellung gedacht sind. Genaueres dazu hier?.

geändert in:

@]

Zur Erzeugung des Action-Links eines Formulars sehen wir den Aufruf der statischen Methode getLink innerhalb der PluginEngine-Klasse. Die PluginEngine-Klasse stellt einige statische Methoden bereit, die für die Entwicklung von Plugins nötig sind. Genaueres dazu hier?.

Ebenfalls ist im Code-Ausschnitt zu sehen, dass die Klasse StudIPTemplateEngine über statische Funktionen verfügt, die zur Darstellung gedacht sind. Genaueres dazu hier?.

 
 
28.03.2007 11:03 Uhr von nimuelle -
Zeilen 6-8 bearbeitet:

Ein neues Plugin wird dann von der so gewählten Basisklasse abgeleitet. (:code:) <?php

geändert in:

Ein neues Plugin wird dann von der so gewählten Basisklasse abgeleitet.

[@<?php

Zeilen 15-17 bearbeitet:

?> (:/code:)

geändert in:

?>@]

Zeile 23 bearbeitet:

(:code:)

geändert in:

[@

Zeile 28 bearbeitet:

(:/code:)

geändert in:

@]

Zeile 40 bearbeitet:

(:code:)

geändert in:

[@

Zeilen 42-43 bearbeitet:

(:/code:)

geändert in:

@]

Zeilen 63-64 bearbeitet:

(:code:)

geändert in:

[@

Zeilen 77-78 bearbeitet:

(:/code:)

geändert in:

@]

 
 
28.03.2007 10:53 Uhr von nimuelle -
Zeilen 1-116 hinzugefügt:

Implementierung eines Plugins

Als Vorbemerkung soll noch einmal ausdrücklich darauf hingewiesen werden, dass PHP zumindest in Version 4, die Stud.IP voraussetzt, keine Namensräume unterstützt. Daher müssen Klasse eindeutig benannt werden und alle Funktionen, die für Plugins verwendet werden, sollten in Klassen gekapselt sein.

Vor der Implementierung eines Plugins sollte zunächst bekannt sein, an welchen Stellen im System ein solches Plugin verlinkt sein soll und wer hierauf Zugriff besitzt. Hieraus sollte dann eine Wahl auf einen der drei Typen bzw. Basisklassen? resultieren.

Ein neues Plugin wird dann von der so gewählten Basisklasse abgeleitet. (:code:) <?php class UserAdministrationPlugin extends AbstractStudIPAdministrationPlugin {

   function UserAdministrationPlugin(){
		parent::AbstractStudIPAdministrationPlugin();
   }

} ?> (:/code:)

Im obigen Beispiel wird von der Klasse AbstractStudIPAdministrationPlugin abgeleitet. Das Plugin erhält dadurch automatisch einige Attribute und Methoden und wird so von der PluginEngine automatisch in den Administrationsbereich von Stud.IP eingebunden. Dies geschieht allerdings erst, wenn dem Plugin auch ein entsprechendes Navigationsobjekt zugewiesen wurde. Die abstrakte Oberklasse verfügt nämlich über kein solches Navigationsobjekt. Dies ist auch bei den übrigen Basisklassen der Fall.

die Verlinkung / die Navigation

Für die Implementierung eines Plugins bedeutet dies, dass der erste Schritt immer das Erzeugen eines Navigationsobjektes ist, welches dem Plugin zugewiesen wird. Dies lässt sich üblicherweise im Rahmen der Initialisierung des Objektes im Konstruktor durchführen, kann aber später zur Laufzeit immer wieder geändert werden.

(:code:) $nav = new PluginNavigation(); $nav->setDisplayname(_("Verwaltung von Benutzern")); $this->setNavigation($nav); $this->setTopNavigation($nav); (:/code:) Im Beispiel wird dem Plugin ein Menü mit dem Namen Verwaltung von Benutzern hinzugefügt und zusätzlich eine Top-Level-Navigation mit demselben Namen eingefügt.

Administrationsplugins weisen zusätzlich die Besonderheit auf, dass sie über eine TopNavigation verfügen können, die dazu führt, dass das Plugin auch auf der Startseite des Administrators angezeigt wird.

Systemplugins weisen die Besonderheit auf, dass sie alternativ über überhaupt keine Navigation verfügen können. In diesem Fall sollte dann aber ein BackgroundTask vorhanden sein. D.h. Systemplugins können alternativ ohne Navigation als Hintergrund-Job laufen. Sie werden dann bei jeder Aktualisierung der Seite ausgeführt. Dies eignet sich bspw. um ein Benutzertracking durchzuführen.

Bei Standardplugins kann es zusätzlich eine Subnavigation geben. Dies sind die in Veranstaltungen und Einrichtungen innerhalb von Stud.IP üblichen Bottomkats bzw. Links unterhalb eines Karteireiters.

Icons

Neben der Navigation sollte als nächstes das Icon des Plugins definiert werden. Dieses befindet sich in der Regel innerhalb des Pluginpaketes und wird durch die PluginEngine automatisch in den entsprechenden Menüs bzw. der Titelzeile des Plugins verwendet.

(:code:) $this->setPluginiconname("img/nutzer.gif"); (:/code:)

Grunddaten

Als nächstes sollte die Methode getPluginname() überschrieben werden, die den Namen des Plugins zurückliefert. Alternativ kann auch direkt der Name des Plugins gesetzt werden. Dieser Name wird bisher nur in der Pluginadministration angezeigt und dient der Verwaltung der Plugins. Eine zukünftige anderweitige Verwendung ist aber möglich. Daher sollte dieser Name immer gesetzt werden.

Aufruf des Plugins durch die PluginEngine

Bevor man nun mit der Implementierung der Logik beginnen kann, sollte man sich einen Überblick davon verschaffen, welche Attribute und Methoden das jeweilige Plugin bereits durch die Plugin-Schnittstelle vorgegeben hat und wie diese durch die Plugin-Engine genutzt werden.

Zunächst einmal benutzt die Plugin-Engine die Informationen aus der Datenbank, um Plugins ins System zu laden. Anschließend wird jedes Plugin nach der Navigation gefragt und dann entsprechend im System verlinkt. Wird nun ein entsprechender Link durch den Nutzer angeklickt, so lädt die Plugin-Engine das angeforderte Plugin und fügt je nach Ausprägung (Standard, System, Administration) des Plugins einen entsprechenden Kopf über dem Plugin-Ausgabebereich ein und ruft dann die show-Methode des Plugins auf. Danach wird die Seite über einen entsprechenden Abschluss beendet.

Der Aufruf des Plugins kann auch über eine andere Methode erfolgen, wenn dies durch das Plugin angefordert wird. Wie dies genau funktioniert, wird an anderer Stelle beschrieben.

Das Plugin sollte also in jedem Fall über eine show-Methode verfügen, da diese der Haupteinstiegspunkt für die Plugin-Engine ist. Innerhalb dieser show-Methode sollte das Plugin den Request verarbeiten und eine Ausgabe liefern. Sinnvoll ist hier auch die Unterscheidung in mehrere Schichten nach dem Model-View-Controller-Modell (MVC). Das hier als Beispiel verwendete Plugin und auch das PluginAdministrationPlugin benutzen dazu jeweils mindestens drei Klassen:

  • UserAdministrationPlugin (Controller)
  • UserAdministration (Model)
  • UserAdministrationVisualization (View)

Das Beispielplugin führt in seiner show-Funktion keinerlei Unterscheidung aufgrund des eingehenden Requests durch. Statt dessen wird zunächst eine Session-Variable gelöscht und dann nur der View instanziiert und dort die Anzeige eines Suchformulars aufgerufen.

Die Visualisierungsklasse ist von einer abstrakten Oberklasse aus der Plugin-Schnittstelle abgeleitet und benötigt zur Instanziierung eine Referenz auf das aufrufende Plugin. Dies ist für eine spätere Verlinkung zwingend notwendig.

(:code:) function show(){

	unset($_SESSION["ldapresults"]);
	$vis = new UserAdministrationVisualization($this);
	// Standard-Ansicht zeigen
	$vis->showLDAPSearchForm();		

} function importUserFromLDAP(){

    // ….

}

function searchLDAP(){

    // ….

} (:/code:)

Weitere Funktionalität des Controllers steckt in den weiteren angedeuteten Methoden. Die Aufteilung in verschiedene Methoden verbessert hier die Übersichtlichkeit und Wartbarkeit des Codes. Statt der Aufteilung in verschiedene Methoden könnte sich auch der gesamte Code zur Kontrolle innerhalb der show-Methode verbergen. Dies wäre jedoch nicht sehr übersichtlicht. Trotzdem kann dies bei einigen Fallunterscheidungen sinnvoll sein.

Wie aber kann nun aus der Visualisierung heraus auf eine der enstprechenden Methoden innerhalb des Plugins zugegriffen werden. (:code:) function showLDAPSearchForm($nachname="",$email="",$name="",$fuzzy=false){

	StudIPTemplateEngine::makeContentHeadline(_("Suche im LDAP"));
		?>
	<form method="POST" action="

<?= PluginEngine::getLink($this->pluginref,array(),"searchLDAP")?>">

		…
	</form>		
		<?
	}

(:/code:)

Zur Erzeugung des Action-Links eines Formulars sehen wir den Aufruf der statischen Methode getLink innerhalb der PluginEngine-Klasse. Die PluginEngine-Klasse stellt einige statische Methoden bereit, die für die Entwicklung von Plugins nötig sind. Genaueres dazu hier?.

Ebenfalls ist im Code-Ausschnitt zu sehen, dass die Klasse StudIPTemplateEngine über statische Funktionen verfügt, die zur Darstellung gedacht sind. Genaueres dazu hier?.

Folgende Methoden müssen für Plugins implementiert werden, die eine Ansicht erzeugen.

  • show:
    Erzeugt die Ansicht des Plugins

Daneben gibt es weitere Methoden, die optional implementiert werden können.

  • initialize:
    Wird von der PluginEngine automatisch vor weiteren Aufrufen aufgerufen, sofern das Plugin diese Methode implementiert.
  • prepareUninstallation:
    Wird von der PluginEngine automatisch unmittelbar vor dem Löschen des Plugins aufgerufen. Das Plugin sollte hierin von ihm angelegte Tabellen etc. löschen.

Ausgangspunkt für eigene Entwicklungen

Als Ausgangspunkt für eigene Entwicklungen können die bereitgestellten Basis-Plugins dienen. Diese erzeugen nur einen Menüeintrag und ansonsten einen leeren Content-Bereich.

Zudem sollten folgende Klassen genauer angesehen werden:

  • plugins/engine/PluginEngine.class.php
  • plugins/engine/StudIPTemplateEngine.class.php
  • plugins/core/AbstractStudIPPlugin.class.php
  • plugins/core/AbstractStudIPStandardPlugin.class.php
  • plugins/core/AbstractStudIPAdministrationPlugin.class.php
  • plugins/core/AbstractStudIPSystemPlugin.class.php

 

 

Quelle: Basis-Wiki-Hilfe | Letzte Änderung: 01.04.2011 23:37 Uhr, tthelen | Local view: Basis-Hilfe