Übersetzt von Immanuel Scholz

Plugin API July 27, 2005
Bemerkung:

Einleitung

Zurück zum Inhaltsverzeichnis

Dieses Dokument beschreibt, wie du deine eigenen Nucleus Plugins erstellen kannst.

Inhaltsverzeichnis

Einleitung Zurück zum Anfang

Nucleus erlaubt jedem, Funktionalitäten zu ergänzen, ohne den bestehenden PHP Code ändern zu müssen. Erweiterungen sind simple PHP Skripte, die bestimmte Funktionen implementieren. Erweiterungen können einfach zwischen verschiedenen Nucleusbenutzern ausgetauscht werden. Die Installation ist einfach: Die Datei in das entsprechende Verzeichnis kopieren und Nucleus Bescheid geben das sie da ist.

Einige Vorteile von Nucleus Erweiterungen:

Alle Plugindateien sollten in das in config.php aufgeführte Verzeichnis gespielt werden. Normalerweise ist dies .../nucleus/plugins/. Plugindateien sind NP_name.php benannt, wobei name der Name des Plugins ist. Einige Plugins benötigen ein Unterverzeichnis mit gleichem Namen name um zusätzliche Dateien des Adminbereiches zu speichern.

Achtung: Groß- und Kleinschreibung ist wichtig. Namen sollten mit NP_, nicht Np_ oder np_ beginnen. Falls Plugins zusätzliche Unterverzeichnisse benötigen, sollte der Name vollständig kleingeschrieben sein.

Dein erstes Plugin Zurück zum Anfang

Lass uns dein erstes Plugin erstellen. Jedes Plugin ist eine PHP Klasse welche von der Klasse NucleusPlugin abgeleitet ist.

<?php

class NP_HelloWorld extends NucleusPlugin
{
	// Name des Plugins
	function getName()
	{
		return 'Hallo Welt';
	}

	// Autor des Plugins
	function getAuthor()
	{
		return 'Wouter Demuynck';
	}

	// Eine URL zur Pluginwebseite.
	// Kann auch mailto:foo@bar.com sein.
	function getURL()
	{
		return 'http://nucleuscms.org/';
	}

	// Version des Plugins
	function getVersion()
	{
		return '1.0';
	}

	// Eine Beschreibung, wie sie auf der Seite 
	// "Installierte Plugins" angezeigt wird
	function getDescription()
	{
		return 'Einfach ein Beispielplugin.';
	}

	function doSkinVar($skinType)
	{
		echo 'Hallo Welt';
	}

	function supportsFeature ($what)
	{
		switch ($what)
		{
			case 'SqlTablePrefix':
				return 1;
			default:
				return 0;
		}
	}

}
?>
  1. Füge den Code in eine Datei mit dem Namen NP_HalloWelt.php ein und kopiere diese in dein Pluginverzeichnis (plugins). Achtung: Es darf sich kein Leerzeichen zwischen dem letzten ?> bzw. dem ersten <?php befinden!. NP steht übrigens für "Nucleus Plugin".
  2. Öffne den Nucleus Administrationsbereich und gehe zu Nucleus Management/Manage Plugins
  3. Du wirst nun das HalloWelt Plugin zum installieren vorfinden. Wenn alles erfolgreich installiert wurde, erscheint der Name in der Liste der installierten Plugins.
  4. Nun editiere eines deiner Skins und füge das Folgende an einer Stelle ein, von der du weißt wo sie später erscheinen wird.
    <%HalloWelt%>
    Beachte die Groß-/Kleinschreibung des Namens (HalloWelt).
  5. Jetzt rufe die Seite, die das Skin benutzt auf. "Hallo Welt" sollte an der Stelle erscheinen, an die du die Variable geschrieben hast.

Na, das war doch nicht so schwer, oder? Weiter gehts.

Übersicht über die Klasse NucleusPlugin Zurück zum Anfang

Alle Nucleus Plugins müssen von der PHP Klasse NucleusPlugin erben. Das klingt komplizierter als es ist. Es macht dein Leben sogar einfacher, da du nur die Methoden implementieren musst, die dein Plugin benötigt. Außerdem erhätst du Zugriff auf einige hilfreiche Funktionen.

Unten ist eine Übersicht der Methoden, die NucleusPlugin bietet und welche im eigenen Plugin überschrieben werden können. Wenn du den Quelltext der Klasse selbst sehen möchtest, er ist unter nucleus/libs/PLUGIN.php zu finden.

Übersicht über die Klasse NucleusPlugin (Überschreibbare Methoden)
SignaturErklärung
getName() Liefert den Namen des Plugins. Das ist der Name, der in der Liste der installierten Plugins angezeigt wird. Du solltest diese Methode immer überschreiben, da die Standardimplementation Undefined liefert.
getAuthor() Liefert den Namen des Autors. Das ist der Autorname, der in der Liste der installierten Plugins angezeigt wird. Du solltest diese Methode immer überschreiben, da die Standardimplementation Undefined liefert.
getURL() Liefert die URL der Website, von der das Plugin herunter geladen werden kann oder von der weiteregehende Informationen über das Plugin abgerufen werden können. Wenn keine solche Seite existiert, sollte ein mailto:-Link mit einer Email Adresse des Autors eingetragen werden. Du solltest diese Methode immer überschreiben, da die Standardimplementation Undefined liefert.
getDescription() Liefert eine Beschreibung des Plugins. Die Beschreibung wird in der Liste der installierten Plugins angezeigt. Die Standardimplementation liefert Undefined.
getVersion() Liefert die Version des Plugins. Die Standardimplementation liefert 0.0.
getMinNucleusVersion() (v2.0b) Liefert die kleinste benötigte Nucleus Version. Die Standardimplementation liefert 155 (v1.55). Wenn dein Plugin Funktionalität einer späteren Nucleus Version benötigt, überschreibe diese Funktion (z.B. v2.0 -> 200). Achtung: Nucleus v1.55 benutzt diese Funktion nicht. Daher ist es möglich, ein Plugin zu v1.55 zu installieren, obwohl dieses eine neuere Nucleus Version benötigt.
getMinNucleusPatchLevel() (v3.1) Liefert das kleinste benötigte Nucleus Patch Level um die kleinste benötigte Nucleus Version zu starten (getMinNucleusVersion). Die Standardimplementation liefert 0. Diese Funktion wird typischerweise benutzt wenn neue Plugins nur als Patches zum letzten Nucleus Release existieren.
init() Initialisiert das Plugin. Diese Methode wird aufgerufen direkt nachdem das Pluginobjekt erstellt und das Attribut plugid gesetzt wurde. Die Standardimplementation ist leer.
doSkinVar($skinType) Diese Methode wird aufgerufen, wenn Plugins über <%plugin(...)%> gestartet werden. $skinType enthält den Typ des Skins (item, archive, ...) von dessen Plugin es aufgerufen wurde. Obwohl nur ein Parameter angegeben wurde, können mehrere übergeben werden. Mehr über die skinvar Variable. Die Standardimplementation ist leer.
doTemplateVar(&$item) Wie doSkinVar, nur für <%plugin(...)%>-var in Templates (item/body/footer und dateheader/footer). Die Standardimplementation ruft doSkinVar mit template als Skintyp auf. Mehr Informationen über doTemplateVar
doTemplateCommentsVar(&$item, &$comment) (v2.0b) Wie doSkinVar, nur für <%plugin(...)%>-var in Templates (kommentarbezogene Teile). Die Standardimplementation ruft doSkinVar mit template als Skintyp auf. Mehr Informationen über doTemplateVar
doAction($type) Wenn das Plugin mit dem Nutzer kommunizieren will, können dafür Aktionen in action.php erlaubt werden. Dieses Skript benutzt Nucleus um neue Kommentare und Karma-Votes zu unterstützen. Dieses Skript ruft dann doAction auf. $type enthält einen (optionalen) Nachrichtentyp. Innerhalb von doAction kann auf zusätzliche Variablen des Requests zugegriffen werden. Die Standardimplementation liefert No Such Action, was eine Fehlermeldung auslöst. Mehr Informationen über doAction.
install() Wird aufgerufen, wenn das Plugin installiert wird. Sie sollte Initialisierungsschritte wie das Erstellen von Datenbanktabellen, Pluginoptionen etc. beinhalten. Die Standardimplementation ist leer.
unInstall() Wird aufgerufen um das Plugin zu deinitialisieren. In dieser Funktion sollte das Plugin informationen, welche es erstellt hat, wieder löschen. Die Standardimplementation ist leer.
getEventList() Plugins können sich auf Ereignisse registrieren. Ereignisse werden erzeugt, wenn immer Nucleus eine bestimmte Aktion ausführt. Beispielsweise führt ein AddItem zum Aufruf von aller Plugins, die sich auf dieses Ereignis registriert haben. Die aufgerufene Funktion ist dann event_AddItem($params). $params ist dabei ein assoziatives Array mit verschiedenen Feldern wie itemid. Die Standardimplementation von getEventList() liefert ein leeres Array, was bedeutet, dass das Plugin sich auf kein Event registriert. Mehr über Events.
getTableList() Liefert ein Array von Datenbanktabellen welche dieses Plugin erstellt hat. Die Liste wird bei der Datensicherung (backup) von Nucleus benutzt, so dass Tabellen von Plugins ebenfalls gesichert werden. Die Standardimplementation liefert ein leeres Array.
hasAdminArea() Wenn das Plugin einen eigenen Administrationsbereich (admin area) benötigt, sollte es 1 liefern, sonst 0. Die Standardimplementation liefert 0.
getPluginDep() (v3.2) Liefert ein Array von Pluginnamen. Nucleus verweigert die Installation von Plugins, wenn irgend ein Plugin aus dieser Liste nicht installiert ist. Die Standardimplementation liefert ein leeres Array.Mehr Informationen über Pluginabhängigkeiten.

Neben den überschreibbaren Funktionen bietet die Klasse NucleusPlugin einige zusätzliche Funktionen, welche du nicht überschreiben solltest. Sie können aber innerhalb deines Plugins mit $this->funktionsname() aufgerufen werden.

Übersicht der nicht-überschreibbaren Funktionen der Klasse NucleusPlugin
SignaturErklärung
createOption(...)
createBlogOption(...)(v2.2)
createCategoryOption(...)(v2.2)
createMemberOption(...)(v2.2)
createItemOption(...)(v3.2)
Erzeugt eine neue Option.
deleteOption(...)
deleteBlogOption(...)(v2.2)
deleteCategoryOption(...)(v2.2)
deleteMemberOption(...)(v2.2)
deleteItemOption(...)(v3.2)
Löscht eine Option.
setOption(...)
setBlogOption(...)(v2.2)
setCategoryOption(...)(v2.2)
setMemberOption(...)(v2.2)
setItemOption(...)(v3.2)
Setzt den Wert einer Option.
getOption(...)
getBlogOption(...)(v2.2)
getCategoryOption(...)(v2.2)
getMemberOption(...)(v2.2)
getItemOption(...)(v3.2)
Liefert den Wert einer Option.
getAllBlogOptions(...)(v2.2)
getAllCategoryOptions(...)(v2.2)
getAllMemberOptions(...)(v2.2)
getAllItemOptions(...)(v3.2)
Liefert ein assoziatives Array aller Werte (ein Wert pro Kontext) für eine bestimmte Option.
getBlogOptionTop(...)(v3.2)
getMemberOptionTop(...)(v3.2)
getCategoryOptionTop(...)(v3.2)
getItemOptionTop(...)(v3.2)
Liefert den Ersten aller Werte für eine bestimmte Option.
getID() Liefert die ID des Plugins. Die ID wird intern in Nucleus benutzt.
getAdminURL() Liefert die URL des Adminbereichs, in dem sich das Plugin befindet. Wenn das Plugin keinen Adminbereich benötigt, ist dieser Wert ungültig.
getDirectory() Liefert den Pfad des Dateisystems auf dem Server, in dem zusätzliche Dateien des Plugins gespeichert sind. Wenn das Plugin keine zusätzlichen Dateien hat, ist dieser Wert ungültig. Der Name ist beispielsweise .../nucleus/plugins/pluginname
getShortName() Liefert den Plugin Klassennamens ohne das NP_ Präfix, kleingeschrieben. Dieser Name wird in getAdminURL und getDirectory benutzt.

Die Skinvariablen (skinvar)Zurück zum Anfang

Beschreibung

Du kannst eigene Skinvariablen erstellen und diese aufrufen: <%plugin(Pluginname,Parameter)%> oder <%Pluginname(Parameter)%> (falls das nicht im Konflikt mit existierenden Variablen steht). Parameter werden durch Komma getrennt.

Um Skinvariablen zu verwalten, musst du doSkinVar überschreiben. Einige Beispiele von Funktionssignaturen:

function doSkinVar($skinType)
function doSkinVar($skinType, $param1, $param2)
function doSkinVar($skinType, $skinVar, $param1, $param2)
function doSkinVar($skinType, $skinVar, $param1 = 'Standardwert')

Hinweis

The Templatevariable (templatevar) Zurück zum Anfang

Beschreibung

Templatevariablen arbeiten prinzipiel genau so wie Skinvariablen. Es gibt zwei Unterschiede:

  1. Sie werden aus Templates heraus aufgerufen, nicht aus Skins heraus.
  2. Sie bekommen keinen Parameter $skinType. Statt dessen erhalten Templatevariablen extra Parameter mit Informationen über das Item und den Kommentar, welcher gerade gelesen wird: Beachte das & !

Templatevariablen werden genau so aufgerufen wie Skinvariablen (mit <%plugin(Pluginname,Parameter)%> oder <%Pluginname(Parameter)%>)

Alle Templatevariablen werden normalerweise der Funktion doSkinVar übergeben mit 'template' als Parameter skinType.

In deiner eigenen Implementation musst du die Funktion doTemplateVar und/oder doTemplateCommentsVar überschreiben. Diese sind äquivalent zu doSkinVar, außer dass der Parameter skinType fehlt.

function doTemplateVar(&$item)
function doTemplateVar(&$item, $param1, $param2)
function doTemplateVar(&$item, $type, $param1, $param2)
function doTemplateVar(&$item, $type, $param1 = 'Standardwert')
function doTemplateCommentsVar(&$item, &$comment)
function doTemplateCommentsVar(&$item, &$comment, $param1, $param2)
function doTemplateCommentsVar(&$item, &$comment, $type, $param1, $param2)
function doTemplateCommentsVar(&$item, &$comment, $type, $param1 = 'Standardwert')

Hinweis

Aktionen in action.php Zurück zum Anfang

Pluginaktionen können mittels action.php ausgeführt werden, dasselbe Skript, welches zum Empfang von Kommentaren und Karma-Votes benutzt wird. Du kannst es sowohl mit GET als auch POST aufrufen. Benötigte Parameter sind action (sollte 'plugin' sein), name (Name des Plugins) und type (Typ der angeforderten Aktion).

Um diese Aktionen zu ermöglichen, sollte die Funktion doAction($actionType) implementiert werden. Zusätzliche Parameter der URL können über requestVar('name') ausgelesen werden (requestVar behandelt magic_quotes_gpc, welches PHP hinzufügt)

Wenn deine doAction einen String liefert, wird dies als Fehler interpretiert und eine Meldung wird angezeigt.

Ereignisse und wie man darauf reagiert Zurück zum Anfang

Nucleusplugins können sich auf Ereignisse registrieren, welche auftreten, wenn etwas wichtiges passiert. Das Plugin kann dann bestimmte Aktionen ausführen oder Text ausgeben.

Beispiel

Unten ist ein Beispiel wie ein Plugin sich auf PreAddComment registriert. PreAddComment ist ein Ereignis, welches direkt vor dem Einfügen eines Kommentares zu einem Blog generiert wird.

class NP_Acronyms extends NucleusPlugin {
  ...
  function getEventList() { return array('PreAddComment'); }
  ...
  function event_PreAddComment(&$data) {
	// replace acronym HTML
	$data['comment']['body'] =
		strreplace('HTML',
				   '<acronym title="HyperText Markup Language">HTML</acronym>',
				   $data['comment']['body']);
  }
}

Dieses Plugin ersetzt den Text HTML in jedem Kommentar mit <acronym title="HyperText Markup Language">HTML</acronym>. Das acronym-Tag ist ein HTML-Tag das dem Autor erlaubt, zusätzliche Informationen über Akronyme anzugeben.

Registrieren auf Events

Es folgen die Schritte, die du beacten musst um dich auf Ereignisse zu registrieren:

  1. Füge den Ereignisnamen in das Array ein, welches von getEventList geliefert wird.
  2. Erzeuge eine Funktion mit der Signatur event_Ereignisname($data), in welchem die Behandlung des Ereignisses stattfindet.

Mehrere Plugins können sich auf das selbe Ereignis registrieren. Die Reihenfolge, in der diese Plugins benachrichtigt werden ist die der Liste der Plugins im Administrationsbereich. Plugins, die sich weiter oben in der Liste befinden, werden eher benachrichtigt.

Parameter

Die Funktion event_Ereignisname erhält nur einen Parameter, $data, dessen Inhalt sich von Ereignis zu Ereignis unterscheidet. Es ist ein assoziatives Array. Objekte und Arrays in diesem Array werden per Reference übergeben. Änderungen daran bleiben daher erhalten.

Die Ereignisliste unten benutzt Farben um zu kennzeichnen, ob Änderungen an den Parametern von Nucleus gesehen werden oder nicht:

Objekte, welche als Parameter übergeben werden, sind wie folgt gekennzeichnet: object. Die meisten Objekte werden als Referenz übergeben, wodurch sie folgendermaßen aussehen: object by ref

Ereignisliste

Ereignisse auf die sich Plugins registrieren können
NameWannParameter
InitSkinParse Direkt bevor das Skin initialisiert wird
skin
Das SKIN-Objekt, welches das Einlesen behandelt
type
Der Typ des skinpart ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup' oder 'fileparser')
PreSkinParse Direkt bevor das Einlesen der Skins beginnt
skin
The SKIN-Objekt das das Einlesen behandelt
type
Typ des skinpart ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser')
contents
Der Inhalt des Skins
PostSkinParse Direkt nach Einlesen des Skins
skin
The SKIN-Objekt das das Einlesen behandelt
type
Typ des skinpart ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser')
PreItem Bevor der Eintrag eingelesen wird, aber nachdem die Kopfzeile plaziert wurde.
blog
BLOG Objekt
item
Objekt welches die Daten enthält
PostItem Nachdem der Eintrag gelesen wurde, aber bevor die Fußzeile eingelesen wird.
blog
BLOG Objekt
item
Objekt welches die Daten enthält
PreComment Bevor ein Kommentar angezeigt wird.
comment
Assoziatives Array welches die Kommentare enthält
PostComment Nachdem ein Kommentar angezeigt wurde.
comment
Assoziatives Array welches die Kommentare enthält
PreDateHead Bevor eine Datumskopfzeile angezeigt wird.
blog
BLOG Objekt
timestamp
Datum der Kopfzeile
PostDateHead Nachdem eine Datumskopfzeile angezeigt wurde.
blog
BLOG Objekt
timestamp
Datum der Kopfzeile
PreDateFoot Bevor eine Datumsfußzeile eingelesen wird.
blog
BLOG Objekt
timestamp
Timestamp des Tages, der geschlossen wurde
PostDateFoot Nachdem eine Datumsfußzeile eingelesen wurde.
blog
BLOG Objekt
timestamp
Timestamp des Tages, der geschlossen wurde
LoginSuccess Nach einem erfolgreichen Login.
member
MEMBER Objekt
LoginFailed Nach einem fehlgeschlagenen Login.
username
Loginname der im Versuch benutzt wurde.
Logout Nach einem Ausloggen
username
Loginname der sich ausgeloggt hat.
PreBlogContent Bevor der Bloginhalt durch eine Skinvariable eingefügt wird.
blog
BLOG Objekt
type
Typ der Skinvariable die aufgerufen wurde ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')
PostBlogContent Nachdem der Bloginhalt durch eine Skinvariable eingefügt wurde.
blog
BLOG Objekt
type
Typ der Skinvariable die aufgerufen wurde ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')
PreAddComment Bevor ein Kommentar in die Datenbank eingefügt wird.
comment
Kommentar (Associatives Array)
PostAddComment Nachdem ein Kommentar in die Datenbank eingefügt wurde.
comment
Kommentar (Associatives Array)
commentid
Kommentar-ID
PostRegister Nachdem ein user registriert wurde
member
Neues MEMBER Objekt
PostAddItem Nachdem ein Eintrag in die Datenbank eingefügt wurde.
itemid
Neue Item-ID in der Datenbank
PostUpdateItem Direkt nachdem ein Eintrag in der Datenbank aktualisiert wurde.
itemid
Item ID
PreAddItem Bevor ein Eintrag in die Datenbank geschrieben wird.
title
Titel
body
Text
more
erweiteter Text
blog
BLOG Objekt
authorid
ID des Autors
timestamp
Unix Timestamp
closed
1 (keine Kommentare erlaubt) oder 0 (Kommentare erlaubt)
draft
1 (Entwurf) or 0 (kein Entwurf)
catid
ID der Kategorie
PreUpdateItem Direkt bevor ein Eintrag aktualisiert wird.
itemid
Item ID
title
Titel
body
Text
more
erweiteter Text
blog
BLOG Objekt
closed
1 (keine Kommentare erlaubt) oder 0 (Kommentare erlaubt)
catid
ID der Kategorie
PrepareItemForEdit Nach dem einlesen eines Eintrags aus der Datenbank, aber bevor der Eintrag dem User angezeigt wird
item
Assoziatives Array mit den Eintragsdaten
PreUpdateComment Direkt bevor ein Kommentar aktualisiert und in der Datenbank gespeichert wird
body
Kommentartext
PrepareCommentForEdit Nachdem ein Kommentar aus der Datenbank eingelesen wurde und bevor er dem Benutzer angezeigt wird.
comment
Kommentardaten (Assoziatives Array)
PrePluginOptionsEdit (v2.0b) Bevor die Option 'Plugin editieren' Seite erzeugt wird.
(v2.2) zusätzliche Parameter
(v3.2) Zusätzliche Parameter für jede Option
context
(v2.2) global, blog, member, item oder category
options
Array mit einem assoziativen Array für jede Option mit den folgenden Einträgen: name, value, oid, description, type, typeinfo, contextid, extra. Zusätzliche Optionen können angefügt werden (Falls du irgendetwas damit tun willst, musst du dich auch auf PostPluginOptionsUpdate registrieren.)
Mit dem Feld extra kannst du zusätzlichen HTML Text (zum Beispiel Formular-Controls) hinzufügen. Falls du dies tust, solltest du die pid mit getID() vergleichen und name an extra anfügen.
plugid
Plugin ID (vergleiche mit GetID() um zu ermitteln, ob du betroffen bist). Nur vorhanden, wenn context global ist.
contextid
context ID (blogid, memberid, catid, itemid abhängig von context)
PrePluginOptionsUpdate (v3.2) Bevor die Option für ein Plugin aktualisiert werden. (Mit diesem Event kannst du Werte für Optionen validieren/verändern)
context
(v2.2) global, member, blog, item oder category
plugid
Plugin ID (vergleiche mit GetID() um zu ermitteln, ob du betroffen bist).
optionname
Name der Option
contextid
context ID (blogid, memberid, catid, itemid abhängig von context)
value
Neuer Wert für die Option
PostPluginOptionsUpdate (v2.0b) Nachdem die Optionen für ein Plugin aktualisiert wurden.
(v2.2) Verschiedene Parameter, abhängig vom Kontext.
context
(v2.2) global, member, blog, item oder category
plugid
Plugin ID (vergleiche mit GetID() um zu ermitteln, ob du betroffen bist).
blogid
(v2.2) Blog ID (blog context)
blog
(v2.2) BLOG Objekt (blog context)
memberid
(v2.2) Member ID (member context)
member
(v2.2) MEMBER Objekt (member context)
catid
(v2.2) Categorie ID (category context)
itemid
(v2.2) Item ID (item context)
member
(v2.2) ITEM object (item context)
PostAuthentication (v2.0b) Nachdem die Loginprozedur abgeschlossen wurde. Dies tritt bei jedem Seitenrequest auf.
loggedIn
Ergebnis von $member->isLoggedIn()
PreAddItemForm (v2.0b) Direkt bevor ein Eintrag in die Form hinzugefügt wird (Bookmarklet oder Adminbereich).
contents
Referenz auf ein assoziatives Array, in welchem die Einträge 'title', 'body' und 'more' mit Initialisierungswerten gesetzt werden können. Um mehrfache Änderung durch verschiedene Plugins zu vermeiden, setze den 'hasBeenSet' Eintrag auf 1 (und teste ihn bevor du die Werte veränderst)
blog
Referenz auf ein BLOG Objekt
AddItemFormExtras (v2.0b) Irgendwo im Hinzufügen von Einträgen oder Bookmarklets. Hier können Plugins zusätzliche Felder anfügen ohne eine der .template Dateien ändern zu müssen.
blog
Referenz auf ein BLOG Objekt
EditItemFormExtras (v2.0b) Irgendwo im Ändern von Einträgen oder Bookmarklets. Hier können Plugins zusätzliche Felder anfügen ohne eine der .template Dateien ändern zu müssen.

Bitte, füge nicht zuviele Einträge hinzu und BITTE, generiere korrektes XHTML, zum Beispiel:
<h3>Pluginname</h3>
<p>dein Zeug</p>
Dadurch können mehrere Plugins Einträge hinzufügen und es wird eine gute Struktu beibehalten. Benutze bitte außerdem Präfixe, um Namenskonflikte zu vermeiden (z.B. plug_tb_url)
blog
Referenz auf ein BLOG Objekt
variables
(read-only) Ein assoziatives Array mit aller Art von Informationen über den Eintrag, der gerade editiert wird: 'itemid', 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid', 'timestamp', 'karmapos', 'karmaneg', 'catid'
itemid
shortcut to the item ID
BlogSettingsFormExtras (v2.0) Auf der Seite Blogeinstellungen. Du kannst deine eigenen Forms hier hinzufügen.

Bitte, füge nicht zuviele Einträge hinzu und BITTE, generiere korrektes XHTML, zum Beispiel:
<h4>Pluginname</h4><form method="post" action="..."><p>
Dein Zeug
</p></form>
Dadurch können mehrere Plugins Einträge hinzufügen und es wird eine gute Struktu beibehalten. Benutze bitte außerdem Präfixe, um Namenskonflikte zu vermeiden (z.B. plug_tb_url)
blog
Referenz auf ein BLOG Objekt
PreDeleteItem (v2.0) Direkt bevor ein Eintrag aus der Datenbank gelöscht wird.
itemid
Id des Eintrags, der gelöscht wird.
PostDeleteItem (v2.0) Direkt nachdem ein Eintrag aus der Datenbank gelöscht wurde.
itemid
Id des gelöschten Eintrags
PreDeleteCategory (v2.0) Direkt bevor eine Kategorie aus der Datenbank gelöscht wird.
catid
Id der Kategorie
PostDeleteCategory (v2.0) Direkt nachdem eine Kategorie aus der Datenbank gelöscht wurde.
catid
Id der Kategorie
PreDeleteBlog (v2.0) Direkt bevor ein Blog aus der Datenbank gelöscht wird.
blogid
ID des Blogs, der gelöscht wird.
PostDeleteBlog (v2.0) Direkt nachdem ein Blog aus der Datenbank gelöscht wurde.
blogid
ID des Blogs, der gelöscht wurde.
PreDeleteMember (v2.0) Direkt bevor ein Mitglied aus der Datenbank gelöscht wird.
member
Referenz auf das Objekt MEMBER, das mit dem Mitglied assoziiert ist, welches gelöscht werde soll.
PostDeleteMember (v2.0) Direkt nachdem ein Mitglied aus der Datenbank gelöscht wurde.
member
Referenz auf das Objekt MEMBER, das mit dem Mitglied assoziiert ist, welches gelöscht wurde.
PreDeleteTeamMember (v2.0) Direkt bevor ein Mitglied aus dem Weblog Team gelöscht wird.
member
Referenz auf das MEMBER Objekt
blogid
ID des Blogs
PostDeleteTeamMember (v2.0) Direkt nachdem ein Mitglied aus dem Weblog Team gelöscht wurde.
member
Referenz auf das MEMBER Objekt
blogid
ID des Blogs
PreDeleteComment (v2.0) Direkt bevor ein Kommentar aus der Datenbank gelöscht wird.
commentid
ID des Kommentars
PostDeleteComment (v2.0) Direkt nachdem ein Kommentar aus der Datenbank gelöscht wurde.
commentid
ID des Kommentars
ActionLogCleared (v2.0) Nachdem das Log gelöscht wurde. None
PreDeleteTemplate (v2.0) Direkt bevor ein Template aus der Datenbank gelöscht wird.
templateid
ID des Templates, dass gelöscht wird.
PostDeleteTemplate (v2.0) Direkt nachdem ein Template aus der Datenbank gelöscht wurde.
templateid
ID des Templates, dass gelöscht wurde.
PreDeleteSkin (v2.0) Direkt bevor ein Skin aus der Datenbank gelöscht wird.
skinid
ID des Skins, dass gelöscht wird.
PostDeleteSkin (v2.0) Direkt nachdem ein Skin aus der Datenbank gelöscht wurde.
skinid
ID des Skins, dass gelöscht wurde.
PreDeletePlugin (v2.0) Direkt bevor ein Plugin aus der Datenbank gelöscht wird.
plugid
ID des Plugins, dass gelöscht wird.
PostDeletePlugin (v2.0) Direkt nachdem ein Plugin aus der Datenbank gelöscht wurde.
plugid
ID des Plugins, dass gelöscht wurde.
PreDeleteBan (v2.0) Direkt bevor eine IP-Addresse aus der Datenbank gelöscht wird.
blogid
ID des Blogs, für welchen die Addresse gelöscht wird.
iprange
Gebannter Addressraum
PostDeleteBan (v2.0) Direkt nachdem eine IP-Addresse aus der Datenbank gelöscht wurde.
blogid
ID des Blogs, für welchen die Addresse gelöscht wurde.
iprange
Gebannter Addressraum
PreAddCategory (v2.0) Direkt bevor eine neue Kategorie in die Datenbank eingefügt wird.
blog
Referenz auf das BLOG Objekt
name
Name der neuen Kategorie
description
Beschreibung der neuen Kategorie
PostAddCategory (v2.0) Direkt nachdem eine neue Kategorie in der Datenbank erzeugt wurde.
blog
Referenz auf das BLOG Objekt
name
Name der neuen Kategorie
description
Beschreibung der neuen Kategorie
catid
Neue ID der Kategorie
PreAddBlog (v2.0) Direkt bevor ein neuer Blog erzeugt wird.
name
Name des neuen Blogs
shortname
Kurzbezeichnung des neuen Blogs
timeoffset
Zeitdifferenz des neuen Blogs
description
Beschreibung des neuen Blogs
defaultskin
ID des Standard-Skins für den neuen Blog
PostAddBlog (v2.0) Direkt bevor ein neuer Blog erzeugt wurde.
blog
neues BLOG Objekt
PreAddPlugin (v2.0) Direkt bevor ein neues Plugin hinzugefügt wird.
file
Dateiname des neuen Plugins
PostAddPlugin (v2.0) Direkt nachdem ein Plugin hinzugefügt wurde.
plugin
Ein Objekt des neu erzeugten Plugins.
PreAddTeamMember (v2.0) Direkt bevor ein neues Mitglied zum Webteam hinzugefügt wird.
blog
BLOG Objekt
member
MEMBER Objekt
admin
Ein Boolean, dass angibt, ob das neu erzeugte Mitglied Blog-Adminrechte besitzt oder nicht.
PostAddTeamMember (v2.0) Direkt nachdem ein neues Mitglied zum Webteam hinzugefügt wurde.
blog
BLOG Objekt
member
MEMBER Objekt
admin
Ein Boolean, dass angibt, ob das neu erzeugte Mitglied Blog-Adminrechte besitzt oder nicht.
PreAddTemplate (v2.0) Direkt bevor ein neues Template erzeugt wird (Bemerkung: diese Funktion wird auch aufgerufen, wenn ein Template geklont wird.)
name
Name des neuen Templates
description
Beschreibung des neuen Templates
PostAddTemplate (v2.0) Direkt nachdem ein neues Template erzeugt wurde.
name
Name des neuen Templates
description
Beschreibung des neuen Templates
templateid
ID des neuen Templates
PreAddSkin (v2.0) Direkt bevor ein neues Skin erzeugt wird (Bemerkung: diese Funktion wird auch aufgerufen, wenn ein Skin geklont wird.)
name
Name des neuen Skins
description
Beschreibung des neuen Skins
type
Typ (content type) des neuen Skins
includeMode
Hinzufügemodus des neuen Skins
includePrefix
Prefix des neuen Skins
PostAddSkin (v2.0) Direkt nachdem ein neues Skin erzeugt wurde.
name
Name des neuen Skins
description
Beschreibung des neuen Skins
type
Typ (content type) des neuen Skins
includeMode
Hinzufügemodus des neuen Skins
includePrefix
Prefix des neuen Skins
skinid
ID des neuen Skins
PreAddBan (v2.0) Direkt bevor eine neue IP-Addresse der Sperrliste des Weblogs hinzugefügt wird.
blogid
ID des neuen Blogs
iprange
Addressbereich, der gesperrt werden soll
reason
Grund für die Sperrung (in Textform)
PostAddBan (v2.0) Direkt nachdem eine neue IP-Addresse der Sperrliste des Weblogs hinzugefügt wurde.
blogid
ID des neuen Blogs
iprange
Addressbereich, der gesperrt werden soll
reason
Grund für die Sperrung (in Textform)
PreMoveItem (v2.0) Direkt bevor ein Eintrag zu einem anderen Blog/einer anderen Kategorie verschoben wird.
itemid
ID des Eintrags
destblogid
ID des Zielblogs
destcatid
ID der Zielkategorie
PostMoveItem (v2.0) Direkt nachdem ein Eintrag zu einem anderen Blog/einer anderen Kategorie verschoben wurde.
itemid
ID des Eintrags
destblogid
ID des Zielblogs
destcatid
ID der Zielkategorie
PreMoveCategory (v2.0) Direkt bevor eine Kategorie in einen anderen Blog bewegt wird.
catid
ID der Kategorie
sourceblog
Quell-BLOG Objekt
destblog
Ziel-BLOG Objekt
PostMoveCategory (v2.0) Direkt nachdem eine Kategorie in einen anderen Blog bewegt wurde.
catid
ID der Kategorie
sourceblog
Quell-BLOG Objekt
destblog
Ziel-BLOG Objekt
MemberSettingsFormExtras (v2.0) Auf der Seite "Mitgliedereinstellungen". Hier kannst du deine eigenen Forms hinzufügen.

Bitte, füge nicht zuviele Einträge hinzu und BITTE, generiere korrektes XHTML, zum Beispiel:
<h4>Pluginname</h4><form method="post" action="..."><p>
Dein Zeug
</p></form>
Dadurch können mehrere Plugins Einträge hinzufügen und es wird eine gute Struktu beibehalten. Benutze bitte außerdem Präfixe, um Namenskonflikte zu vermeiden (z.B. plug_tb_url)
member
Referenz auf ein MEMBER Objekt
GeneralSettingsFormExtras (v2.0) Auf der Seite "Allgemeine Einstellungen". Hier kannst du deine eienen Forms hinzufügen.

Bitte, füge nicht zuviele Einträge hinzu und BITTE, generiere korrektes XHTML, zum Beispiel:
<h4>Pluginname</h4><form method="post" action="..."><p>
Dein Zeug
</p></form>
Dadurch können mehrere Plugins Einträge hinzufügen und es wird eine gute Struktu beibehalten. Benutze bitte außerdem Präfixe, um Namenskonflikte zu vermeiden (z.B. plug_tb_url)
Nichts
AdminPrePageHead (v2.5) Auf der Seite "Administrationsbereich", direkt bevor die Seite gedruckt wird. Dieser Event kann benutzt werden, um zusätzliche Sktipte/CSS zum head-Tag hinzuzufügen.
extrahead
Zusätzliche Information für das head-Tag der HTML Seite. Füge deine Einträge hinten an..
action
Aktuell ausgeführte Aktion oder Seitentyp.
AdminPrePageFoot (v2.5) Auf der Seite "Administrationsbereich", direkt bevor die Fußzeile gedruckt wird.
action
Aktuell ausgeführte Aktion oder Seitentyp.
PreSendContentType (v2.5) Direkt bevor der Content-Type im HTTP-Header gesetzt wird.
contentType
Der Content Type (z.B. application/xhtml+xml)
charset
Kodierung
Seitentyp
Zeichenkette, welche den Typ der anzuzeigenden Seite bezeichnet: skin (Skinparts), media (Medienbibliothek), admin-action (Adminbereich), bookmarklet-action (Bookmarklet)
QuickMenu (v2.5) Am Ende des Kurzmenus des Adminbereiches. Dies kann benutzt werden um zusätzliche Plugineinträge hinzuzufügen. Füge dazu assoziative Arrays an das options Array hinten an. Ein Beispiel kann unter "Den Adminbereich zur Verfügung stellen" gefunden werden.
options
Array
BookmarkletExtraHead (v2.5) Irgendwo im head-Tag des Bookmarklet XHTML Code.
extrahead
Zusätzliche Information für das head-Tag der HTML Seite. Füge deine Einträge hinten an..
FormExtra (v3.2) Innerhalb von Kommentar- Member-Email- oder Aktivierungsforms. Dieses Ereignis erlaubt Plugins zusätzliche Felder in die Form einzufügen. Dieses Ereignis arbeitet mit ValidateForm zusammen, welcher ausgelöst wird, wenn eine Form behandelt wurde.
type
Typ der Form von der das Ereignis ausgelöst wurde.
  • activation
  • additemform (Bemerkung: Das ist nicht die Eintrag hinzufügen Form des Administrationsbereichs!)
  • commentform-loggedin
  • commentform-notloggedin
  • membermailform-loggedin
  • membermailform-notloggedin
member
Wenn type auf activation gesetzt ist, enthält dieses Feld Details über das Mitglied, das aktiviert wird.
ValidateForm (v3.2) Wird aufgerufen, wenn einer der Kommentar-, Member-Email- oder Zugangsaktivierungsforms behandelt wird. Dieses Ereignis erlaubt Plugins ihre eigene Validierung der Daten vorzunehmen und verhindert im Fehlerfall weitere Behandlung. Kann zusammen mit FormExtra eingesetzt werden um zusätzliche Felder der Form hinzuzufügen.
type
Type of the form being handled
  • membermail
  • comment
  • activation
error
Wenn das Plugin die Behandlung der Form abbrechen will, muss es hier eine nicht leere Fehlermeldung eintragen. Dieser Text wird dem Benutzer angezeigt.
comment
Für Forms des Typs comment enthält dies ein assoziatives Array mit den Kommentardaten.
member
Für Forms des Types activation enthält dies Informationen über das Mitglied, was gerade aktiviert wird.

Optionen speichern Zurück zum Anfang

Eine Reihe von Methoden werden angeboten um das setzen und abfragen von Optionen für Plugins einfacher zu machen. Diese Optionen können direkt aus dem Administrationsbereich von Nucleus editiert werden. Dies beseitigt die Notwendigkeit, einen eigenen Administrationsbereich zur Verfügung stellen zu müssen. Außerdem müssen Optionen nicht innerhalb der PHP Datei gespeichert werden.

Folgende Optionen stehen in verschiedenen Kontexten zur Verfügung:

  1. Globale Optionen: Editierbar auf dem Administrationsbereich des Pluginbereichs.
  2. Blog Optionen: Editierbar auf der Blogeinstellungen Seite.
  3. Category options: Editierbar auf der Blogeinstellungen Seite (unter 'Kategorie bearbeiten').
  4. Mitglieder Optionen: Editierbar auf der 'Mitglieder bearbeiten' Seite
  5. Einträge Optionen: Editierbar auf der 'Eintrag hinzufügen' oder 'Eintrag bearbeiten'

Optionstypen

Verschiedene Typen von Optionen werden zur Verfügung gestellt

text
Einfacher Text
yesno
Entweder den Wert 'yes' oder den Wert 'no' (im Eingabebereich als Auswahlfeld (radio button))
password
Textfeld (kein Text bei Eingabe)
textarea (v2.2)
Textfeld mit mehreren Zeilen
select (v2.2)
Auswahlmenu. Benötigt zusätzliche Informationen der Form: Option 1|wert1|Option 2|wert2|Option 3|wert3

Metainformationen über Optionen

Ab Nucleus Version 3.2 können Optionen über Metainformationen auf bestimmte Werte beschränkt werden. Diese Metainformationen werden im Feld $typeExtras als Semikolongetrennte Liste gespeichert. Bemerkung: In einem Auswahlmenu muss die Liste der erste Wert in $typeExtras sein.

Schlüssel Beschreibung
datatype Mit 'datatype' können zusätzliche Hinweise an Nucleus über den Datentyp den du benutzen möchtest übergeben werden. Aktuell ist nur 'numerical' verfügbar. 'numerical' veranlasst Nucleus dazu, nur numerische Werte zu akzeptieren (Clientseitig und Serverseitig überprüft). Verfügbar für: 'select' und 'text')
access Auf 'readonly' gesetzt, bewirkt dies, dass die Option nicht veränderbar ist. Verfügbar für: 'text' und 'textarea')
Wenn auf 'hidden' gesetzt, wird die Option für den Benutzer komplett versteckt. Verfügbar für: 'text')

Einige Beispiele:

// Erzeugt eine Textoption die nur numerische Eingaben erlaubt
$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');
// Erzeugt ein Auswahlmenu das nur numerische Eingaben erlaubt
$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');
// Erzeugt ein nicht beschreibbares Textfeld
$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');

Einschränkungen

  1. Der Name einer Option darf aus maximal 20 Zeichen bestehen.
  2. Die Beschreibung einer Option darf maximal 255 Zeichen enthalten.
  3. Der Wert einer Option hat kein Limit. (Vor v2.5 war das Limit 128 Zeichen).
  4. Die Zeichen '=', '|' und ';' dürfen nicht in Auswahllisten benutzt werden (für Werte) oder in Metainformationen über Optionen

Die Methoden

createOption($name, $desc, $type, $defValue = '', $typeExtras = '')

Erzeugt eine neue Option im globalen Kontext

parameter value
$name Name der Option
$desc Textuelle Beschreibung. Wird auf der Seite angezeigt, auf der die Option bearbeitet werden kann.
$type Optionstyp (siehe oben)
$defValue Startwert
$typeExtras Zusätzliche Informationen über den Optionstyp (siehe oben)

(v2.2) createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')

Erzeugt eine Option im blog Kontext (siehe createOption)

(v2.2) createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')

Erzeugt eine Option im category Kontext (siehe createOption)

(v2.2) createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')

Erzeugt eine Option im member Kontext (siehe createOption)

(v3.2) createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')

Erzeugt eine Option im item Kontext (siehe createOption)

setOption($name, $value)

Ändern von bereits existierenden Optionen

parameter value
$name Option name
$value New value for option

(v2.2) setBlogOption($blogid, $name, $value)

Ändert einen Wert für eine blog Option. Das Attribut blogid kennzeichnet für welchen Blog die Option gültig ist. (Andere Optionen siehe setOption)

(v2.2) setCategoryOption($catid, $name, $value)

Ändert einen Wert für eine category Option. Das Attribut catid kennzeichnet für welchen Blog die Option gültig ist. (Andere Optionen siehe setOption)

(v2.2) setMemberOption($memberid, $name, $value)

Ändert einen Wert für eine member Option. Das Attribut memberid kennzeichnet für welchen Blog die Option gültig ist. (Andere Optionen siehe setOption)

(v3.2) setItemOption($itemid, $name, $value)

Ändert einen Wert für eine item Option. Das Attribut itemid kennzeichnet für welchen Blog die Option gültig ist. (Andere Optionen siehe setOption)

getOption($name)

Liefert den Wert für eine Option aus der Datenbank

Parameter Wert
$name Optionsname

(v2.2) getBlogOption($blogid, $name)

Liefert den Wert für eine blog Option. blogid kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption)

(v2.2) getCategoryOption($catid, $name)

Liefert den Wert für eine category Option. catid kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption)

(v2.2) getMemberOption($memberid, $name)

Liefert den Wert für eine member Option. memberid kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption)

(v3.2) getItemOption($itemid, $name)

Liefert den Wert für eine item Option. itemid kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption)

deleteOption($name)

Eine Option löschen

Parameter Wert
$name Optionsname

(v2.2) deleteBlogOption($name)

Löscht eine blog Option (siehe deleteOption)

(v2.2) deleteCategoryOption($name)

Löscht eine category Option (siehe deleteOption)

(v2.2) deleteMemberOption($name)

Löscht eine member Option (siehe deleteOption)

(v3.2) deleteItemOption($name)

Löscht eine item Option (siehe deleteOption)

(v2.2) getAllBlogOptions($name)

Liefert alle Werte für eine bestimmte blog Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende blogid.

(v2.2) getAllCategoryOptions($name)

Liefert alle Werte für eine bestimmte category Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende catid.

(v2.2) getAllMemberOptions($name)

Liefert alle Werte für eine bestimmte member Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende memberid.

(v3.2) getAllItemOptions($name)

Liefert alle Werte für eine bestimmte item Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende itemid.

(v3.2) getBlogOptionTop($name, $amount = 10, $sort = 'desc')

Liefert den ersten Wert für eine bestimmte Option. Das Ergebnis ist ein Array. Jedes Element des Arrays ist wiederum ein Array mit einem Wert ('value') für jede memberid ('id').

Parameter Wert
$name Optionsname
$amount Die gewünschte Zahl der Optionen
$sort Sortierung ('asc' für aufsteigend oder 'desc' für absteigend)

(v3.2) getMemberOptionTop($name, $amount = 10, $sort = 'desc')

Liefert den ersten Wert für eine bestimmte Option. Das Ergebnis ist ein Array. Jedes Element des Arrays ist wiederum ein Array mit einem Wert ('value') für jede Mitglieder-Id ('id'). Für Parameter, siehe getBlogOptionTop)

(v3.2) getCategoryOptionTop($name, $amount = 10, $sort = 'desc')

Liefert den ersten Wert für eine bestimmte Option. Das Ergebnis ist ein Array. Jedes Element des Arrays ist wiederum ein Array mit einem Wert ('value') für jede Kategorie-Id ('id'). Für Parameter, siehe getBlogOptionTop)

(v3.2) getItemOptionTop($name, $amount = 10, $sort = 'desc')

Liefert den ersten Wert für eine bestimmte Option. Das Ergebnis ist ein Array. Jedes Element des Arrays ist wiederum ein Array mit einem Wert ('value') für jede Item-Id ('id'). Für Parameter, siehe getBlogOptionTop)

Bemerkung: Du kannst diese Funktionen nicht aus dem Konstruktor der Pluginklassen aufrufen. Wenn sie zur intialisierung benötigt werden, rufe sie aus init() auf.

Datenbanktabellen Zurück zum Anfang

Zugriff auf Tabellen von Nucleus

Bis Version 2.0 war der Zugriff auf Tabellen von Nucleus einfach eine SQL Anfrage auf eine der nucleus_ Tabellen. Seit es möglich ist, auf einen selbstdefinierten Tabellennamen in Nucleus Version >2.0 zuzugreifen, sind einige Vorkehrungen bei der Entwicklung von Plugins zu treffen:

  1. Benutze die globale Funktion sql_table('item'), statt auf einen festen Tabellennamens wie nucleus_item zuzugreifen.
  2. Stelle sicher, dass dein Plugin 1 (true) zurückliefert, wenn supportsFeature('SqlTablePrefix') aufgerufen wird. Ansonsten wird das Plugin nicht von Nucleus Versionen >2.0 geladen werden, falls ein benutzerdefiniertes Präfix gesetzt wurde (als Vorkehrung).

Beachte, dass die globale Funktion sql_table nicht in Nucleus Versionen bis 2.0 verfügbar ist. Wenn du diese Methode benutzt und möchtest, dass dein Plugin mit Nucleus Versionen <= 2.0 funktioniert, füge den folgenden Quelltext am Anfang deiner Pluginklasse ein:

<?php

// Plugin sollte mit Nucleus Version <=2.0 funktionieren
if (!function_exists('sql_table'))
{
	function sql_table($name) {
		return 'nucleus_' . $name;
	}
}

class NP_HalloWelt extends NucleusPlugin {
...
}

?>

Deine eigenen Tabellen

Falls dein Plugin eigene Datenbanktabellen benötigt, solltest du sie in der Funktion install erzeugen und in unInstall wieder entfernen.

Einige Hinweise

Den Adminbereich zur Verfügung stellen Zurück zum Anfang

Ab Nucleus Version 2.5 können Plugins eigene Administrationsbereich erzeugen, die mit dem Administrationsbereich von Nucleus interagieren. Auf diese Seiten kann entweder über die Pluginadministration oder das Schnellmenu links zugegriffen werden.

Grundlagen

Um einen Administrationsbereich zur Verfügung zu stellen sind folgende Schritte notwendig:

  1. Erzeuge ein Unterverzeichnis im Pluginverzeichnis und benenne es pluginname, falls dein Plugin NP_Pluginname heißt. Beachte das der Name kleingeschrieben wird!
  2. Erzeuge eine Date index.php in diesem Verzeichnis mit folgendem Inhalt:
    <?php
    
    	// Wenn sich dein Pluginverzeichnis nicht an der Standardstelle befindet,
    	// bearbeite diese Variable um auf das Verzeichnis zu verweisen, welches
    	// config.php enthält
    	$strRel = '../../../';
    
    	include($strRel . 'config.php');
    	if (!$member->isLoggedIn())
    		doError('Nicht eingeloggt.');
    
    	include($DIR_LIBS . 'PLUGINADMIN.php');
    
    	// Erzeuge die Administrationsseite
    	$oPluginAdmin = new PluginAdmin('Pluginname');
    	$oPluginAdmin->start();
    
    	echo '<h2>Pluginname</h2>';
    
    	echo '<p>Hier stehen die Einstellungen<p>';
    
    	$oPluginAdmin->end();
    
    ?>
  3. Registrier dich auf das Ereignis QuickMenu und füge folgenden Code in dein Plugin ein:
    function event_QuickMenu(&$data) {
    		array_push(
    			$data['options'],
    			array(
    				'title' => 'Pluginname',
    				'url' => $this->getAdminURL(),
    				'tooltip' => 'Tooltiptext'
    			)
    		);
    	}
  4. Implementiere folgendes:
    function hasAdminArea()
    {
    	return 1;
    }

Abwägung

Die Klasse PluginAdmin

Der Sinn von PluginAdmin ist es, dir zu helfen. Einmal erstellt, kannst du $oPluginAdmin->plugin aufrufen um Objektinstanzen deines Plugins zu erhalten.

Hilfeseiten bereitstellen Zurück zum Anfang

Ab Nucleus Version 3.2 können Plugins Hilfeseiten mit einer Übersicht über das Plugin, die verfügbaren Skinvars and Templatevars, wo weitere Informationen zu finden sind etc. zur Verfügung stellen.

Die Hilfeseite ist über die Pluginübersicht des Administrationsbereichs zugänglich.

Grundlagen

Um eine Hilfeseite zur Verfügung zu stellen sind folgende Schritte notwendig:

  1. Erzeuge ein Unterverzeichnis im Pluginverzeichnis und benenne es pluginname, falls dein Plugin NP_Pluginname heißt. Beachte das der Name kleingeschrieben wird! Das ist praktisch daselbe Verzeichnis, wie für den Administrationsbereich.
  2. Erzeuge eine Datei help.html in diesem Verzeichnis. Hier kannst du dein Plugin dokumentieren. Du kannst folgendes als eine gute Basis benutzen:
    <h3>Plugin Übersicht</h3>
    
    <p>Die einzige Aufgabe dieses Plugins ist zu zeigen, wie die Pluginhilfeseiten funktionieren.</p>
    
    <h3>Installation</h3>
    
    <p>Wenn du das hier lesen kannst, hast du das Plugin schon installiert :-)</p>
    
    <h3>SkinVars</h3>
    
    <p>Da dieses Plugin nur ein Test ist, enthält es keine Skinvars oder Templatevars. Wenn es welche hätte, dann würde folgendes gelten:
    
    <ul><li><b><%HelpPageTestCase1%></b>: tut irgendwas</li>
    <li><b><%HelpPageTestCase1(foobar)%></b>: tut was ganz anderes</li></ul></p>
    
    <h3>Hilfe und Bugreports</h3>
    
    <p>Für weitere Hilfe und/oder Bugreports, benutze bitte folgendes Forum:
    <a href="http://forum.nucleuscms.org/viewtopic.php?t=<TOPIC_ID_GOES_HERE>">
    http://forum.nucleuscms.org/viewtopic.php?t=<TOPIC_ID_GOES_HERE></a></p>
    
    <h3>Versionen</h3>
    
    <ul><li>Version 0.1: erster Versuch</li>
    <li>Version 0.0: noch ersterer Versuch ;-)</li></ul>
  3. Liefere einen Wert größer als 0 für die Funktion supportsFeature('HelpPage'):
    function supportsFeature($what) {
    	switch($what) {
    	case 'HelpPage':
    		return 1;
    	  default:
    		return 0;
    	}
      }

Plugin Abhängigkeitscheck Zurück zum Anfang

Seit Version 3.2 können Plugins Abhängigkeiten zu anderen Plugins deklarieren. Das ist besonders hilfreich für Plugins um kaputte Abhängigkeiten zu erkennen, die sonst die korrekte Ausführung verhindern würden.

Eine Abhängigkeit deklarieren

Nimm folgendes (reales) Beispiel:

NP_PageLinkList hängt von NP_BlogWithOffset ab, also wollen wir sicher stellen, dass ein Benutzer NP_BlogWithOffset vor NP_PageLinkList installieren muss. Mit dieser Schnittstelle ermöglicht es Nucleus dem Programmierer des Plugins, diese Abhängigkeit vor der Installation zu kontrollieren.

NP_PageLinkList muss so verändert werden, dass es NP_BlogWithOffset als seine Abhängikkeit deklariert. Wenn ein Plugin installiert wird, ruft der Kern von Nucleus eine Funktion getPluginDep() auf. Diese Funktion liefert eine Liste von Plugins, die es benötigt. Diese Liste wird anschließend mit allen bereits installierten Plugins überprüft. Nucleus wird die Installation verweigern, wenn ein Plugin auf der Liste noch nicht installiert ist.

Alles was man tun muss ist, die Funktion in NP_PageLinkList bereitzustellen:

function getPluginDep() {
	 return array('NP_BlogWithOffset');
}

Nucleus verhindert ausserdem, dass Plugins deinstalliert werden, von denen noch installierte Plugins abhängen.