Übersetzt von Immanuel Scholz
getMinNucleusVersion
entsprechend anzupassen.Dieses Dokument beschreibt, wie du deine eigenen Nucleus Plugins erstellen kannst.
NucleusPlugin
<%plugin(...)%>
<%plugin(...)%>
action.php
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.
NP_
, nicht Np_
oder np_
beginnen. Falls Plugins zusätzliche Unterverzeichnisse benötigen, sollte der Name vollständig kleingeschrieben sein.
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;
}
}
}
?>
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".
<%HalloWelt%>
Beachte die Groß-/Kleinschreibung des Namens (HalloWelt
).
Na, das war doch nicht so schwer, oder? Weiter gehts.
NucleusPlugin
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.
Signatur | Erklä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 Undefinedliefert. |
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 Undefinedliefert. |
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 Undefinedliefert. |
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.
Signatur | Erklä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
|
getShortName() |
Liefert den Plugin Klassennamens ohne das Präfix, kleingeschrieben. Dieser Name wird in getAdminURL und getDirectory benutzt. |
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')
$skinType
Parameter ist 'index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup' oder 'template'$skinVar
ist der erste Parameter, der als ein Typ der Skinvariable interpretiert wird. Z.B. <%plugin(Pluginname,Variablentyp)%>
)doSkinVar()
(ohne Parameterangabe) benutzen und die Parameter über die PHP Funktion func_get_args()
auslesen. Das ist praktisch, falls du mehrere verschiedene Typen von Skinvariablen mit verschiedener Anzahl von Parametern behandeln möchtest.$currentSkinName
vermerkt.Templatevariablen arbeiten prinzipiel genau so wie Skinvariablen. Es gibt zwei Unterschiede:
$skinType
. Statt dessen erhalten Templatevariablen extra Parameter mit Informationen über das Item und den Kommentar, welcher gerade gelesen wird:
doTemplateVar
bekommt ein &$item
Parameter.doTemplateCommentsVar
bekommt ein &$item
und ein &$comment
Parameter.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')
$currentTemplateName
vermerkt.action.php
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.
Nucleusplugins können sich auf Ereignisse registrieren, welche auftreten, wenn etwas wichtiges passiert. Das Plugin kann dann bestimmte Aktionen ausführen oder Text ausgeben.
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.
Es folgen die Schritte, die du beacten musst um dich auf Ereignisse zu registrieren:
getEventList
geliefert wird.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.
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
Name | Wann | Parameter |
---|---|---|
InitSkinParse | Direkt bevor das Skin initialisiert wird |
|
PreSkinParse | Direkt bevor das Einlesen der Skins beginnt |
|
PostSkinParse | Direkt nach Einlesen des Skins |
|
PreItem | Bevor der Eintrag eingelesen wird, aber nachdem die Kopfzeile plaziert wurde. |
|
PostItem | Nachdem der Eintrag gelesen wurde, aber bevor die Fußzeile eingelesen wird. |
|
PreComment | Bevor ein Kommentar angezeigt wird. |
|
PostComment | Nachdem ein Kommentar angezeigt wurde. |
|
PreDateHead | Bevor eine Datumskopfzeile angezeigt wird. |
|
PostDateHead | Nachdem eine Datumskopfzeile angezeigt wurde. |
|
PreDateFoot | Bevor eine Datumsfußzeile eingelesen wird. |
|
PostDateFoot | Nachdem eine Datumsfußzeile eingelesen wurde. |
|
LoginSuccess | Nach einem erfolgreichen Login. |
|
LoginFailed | Nach einem fehlgeschlagenen Login. |
|
Logout | Nach einem Ausloggen |
|
PreBlogContent | Bevor der Bloginhalt durch eine Skinvariable eingefügt wird. |
|
PostBlogContent | Nachdem der Bloginhalt durch eine Skinvariable eingefügt wurde. |
|
PreAddComment | Bevor ein Kommentar in die Datenbank eingefügt wird. |
|
PostAddComment | Nachdem ein Kommentar in die Datenbank eingefügt wurde. |
|
PostRegister | Nachdem ein user registriert wurde |
|
PostAddItem | Nachdem ein Eintrag in die Datenbank eingefügt wurde. |
|
PostUpdateItem | Direkt nachdem ein Eintrag in der Datenbank aktualisiert wurde. |
|
PreAddItem | Bevor ein Eintrag in die Datenbank geschrieben wird. |
|
PreUpdateItem | Direkt bevor ein Eintrag aktualisiert wird. |
|
PrepareItemForEdit | Nach dem einlesen eines Eintrags aus der Datenbank, aber bevor der Eintrag dem User angezeigt wird |
|
PreUpdateComment | Direkt bevor ein Kommentar aktualisiert und in der Datenbank gespeichert wird |
|
PrepareCommentForEdit | Nachdem ein Kommentar aus der Datenbank eingelesen wurde und bevor er dem Benutzer angezeigt wird. |
|
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 |
|
PrePluginOptionsUpdate | (v3.2) Bevor die Option für ein Plugin aktualisiert werden. (Mit diesem Event kannst du Werte für Optionen validieren/verändern) |
|
PostPluginOptionsUpdate |
(v2.0b) Nachdem die Optionen für ein Plugin aktualisiert wurden.
(v2.2) Verschiedene Parameter, abhängig vom Kontext. |
|
PostAuthentication | (v2.0b) Nachdem die Loginprozedur abgeschlossen wurde. Dies tritt bei jedem Seitenrequest auf. |
|
PreAddItemForm | (v2.0b) Direkt bevor ein Eintrag in die Form hinzugefügt wird (Bookmarklet oder Adminbereich). |
|
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. |
|
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:
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 )
|
|
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:
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 )
|
|
PreDeleteItem | (v2.0) Direkt bevor ein Eintrag aus der Datenbank gelöscht wird. |
|
PostDeleteItem | (v2.0) Direkt nachdem ein Eintrag aus der Datenbank gelöscht wurde. |
|
PreDeleteCategory | (v2.0) Direkt bevor eine Kategorie aus der Datenbank gelöscht wird. |
|
PostDeleteCategory | (v2.0) Direkt nachdem eine Kategorie aus der Datenbank gelöscht wurde. |
|
PreDeleteBlog | (v2.0) Direkt bevor ein Blog aus der Datenbank gelöscht wird. |
|
PostDeleteBlog | (v2.0) Direkt nachdem ein Blog aus der Datenbank gelöscht wurde. |
|
PreDeleteMember | (v2.0) Direkt bevor ein Mitglied aus der Datenbank gelöscht wird. |
|
PostDeleteMember | (v2.0) Direkt nachdem ein Mitglied aus der Datenbank gelöscht wurde. |
|
PreDeleteTeamMember | (v2.0) Direkt bevor ein Mitglied aus dem Weblog Team gelöscht wird. |
|
PostDeleteTeamMember | (v2.0) Direkt nachdem ein Mitglied aus dem Weblog Team gelöscht wurde. |
|
PreDeleteComment | (v2.0) Direkt bevor ein Kommentar aus der Datenbank gelöscht wird. |
|
PostDeleteComment | (v2.0) Direkt nachdem ein Kommentar aus der Datenbank gelöscht wurde. |
|
ActionLogCleared | (v2.0) Nachdem das Log gelöscht wurde. | None |
PreDeleteTemplate | (v2.0) Direkt bevor ein Template aus der Datenbank gelöscht wird. |
|
PostDeleteTemplate | (v2.0) Direkt nachdem ein Template aus der Datenbank gelöscht wurde. |
|
PreDeleteSkin | (v2.0) Direkt bevor ein Skin aus der Datenbank gelöscht wird. |
|
PostDeleteSkin | (v2.0) Direkt nachdem ein Skin aus der Datenbank gelöscht wurde. |
|
PreDeletePlugin | (v2.0) Direkt bevor ein Plugin aus der Datenbank gelöscht wird. |
|
PostDeletePlugin | (v2.0) Direkt nachdem ein Plugin aus der Datenbank gelöscht wurde. |
|
PreDeleteBan | (v2.0) Direkt bevor eine IP-Addresse aus der Datenbank gelöscht wird. |
|
PostDeleteBan | (v2.0) Direkt nachdem eine IP-Addresse aus der Datenbank gelöscht wurde. |
|
PreAddCategory | (v2.0) Direkt bevor eine neue Kategorie in die Datenbank eingefügt wird. |
|
PostAddCategory | (v2.0) Direkt nachdem eine neue Kategorie in der Datenbank erzeugt wurde. |
|
PreAddBlog | (v2.0) Direkt bevor ein neuer Blog erzeugt wird. |
|
PostAddBlog | (v2.0) Direkt bevor ein neuer Blog erzeugt wurde. |
|
PreAddPlugin | (v2.0) Direkt bevor ein neues Plugin hinzugefügt wird. |
|
PostAddPlugin | (v2.0) Direkt nachdem ein Plugin hinzugefügt wurde. |
|
PreAddTeamMember | (v2.0) Direkt bevor ein neues Mitglied zum Webteam hinzugefügt wird. |
|
PostAddTeamMember | (v2.0) Direkt nachdem ein neues Mitglied zum Webteam hinzugefügt wurde. |
|
PreAddTemplate | (v2.0) Direkt bevor ein neues Template erzeugt wird (Bemerkung: diese Funktion wird auch aufgerufen, wenn ein Template geklont wird.) |
|
PostAddTemplate | (v2.0) Direkt nachdem ein neues Template erzeugt wurde. |
|
PreAddSkin | (v2.0) Direkt bevor ein neues Skin erzeugt wird (Bemerkung: diese Funktion wird auch aufgerufen, wenn ein Skin geklont wird.) |
|
PostAddSkin | (v2.0) Direkt nachdem ein neues Skin erzeugt wurde. |
|
PreAddBan | (v2.0) Direkt bevor eine neue IP-Addresse der Sperrliste des Weblogs hinzugefügt wird. |
|
PostAddBan | (v2.0) Direkt nachdem eine neue IP-Addresse der Sperrliste des Weblogs hinzugefügt wurde. |
|
PreMoveItem | (v2.0) Direkt bevor ein Eintrag zu einem anderen Blog/einer anderen Kategorie verschoben wird. |
|
PostMoveItem | (v2.0) Direkt nachdem ein Eintrag zu einem anderen Blog/einer anderen Kategorie verschoben wurde. |
|
PreMoveCategory | (v2.0) Direkt bevor eine Kategorie in einen anderen Blog bewegt wird. |
|
PostMoveCategory | (v2.0) Direkt nachdem eine Kategorie in einen anderen Blog bewegt wurde. |
|
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:
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 )
|
|
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:
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. |
|
AdminPrePageFoot | (v2.5) Auf der Seite "Administrationsbereich", direkt bevor die Fußzeile gedruckt wird. |
|
PreSendContentType | (v2.5) Direkt bevor der Content-Type im HTTP-Header gesetzt wird. |
|
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. |
|
BookmarkletExtraHead | (v2.5) Irgendwo im head -Tag des Bookmarklet XHTML Code. |
|
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. |
|
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. |
|
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:
Verschiedene Typen von Optionen werden zur Verfügung gestellt
yes
' oder den Wert 'no
' (im Eingabebereich als Auswahlfeld (radio button))Option 1|wert1|Option 2|wert2|Option 3|wert3
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');
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) |
Erzeugt eine Option im blog Kontext (siehe createOption
)
Erzeugt eine Option im category
Kontext (siehe createOption
)
Erzeugt eine Option im member
Kontext (siehe createOption
)
Erzeugt eine Option im item
Kontext (siehe createOption
)
Ändern von bereits existierenden Optionen
parameter | value |
---|---|
$name | Option name |
$value | New value for option |
Ä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
)
Ä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
)
Ä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
)
Ä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
)
Liefert den Wert für eine Option aus der Datenbank
Parameter | Wert |
---|---|
$name | Optionsname |
Liefert den Wert für eine blog
Option. blogid
kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption
)
Liefert den Wert für eine category
Option. catid
kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption
)
Liefert den Wert für eine member
Option. memberid
kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption
)
Liefert den Wert für eine item
Option. itemid
kennzeichnet den Blog, für den der Wert abgefragt wurde (andere Parameter: siehe getOption
)
Eine Option löschen
Parameter | Wert |
---|---|
$name | Optionsname |
Löscht eine blog
Option (siehe deleteOption
)
Löscht eine category
Option (siehe deleteOption
)
Löscht eine member
Option (siehe deleteOption
)
Löscht eine item
Option (siehe deleteOption
)
Liefert alle Werte für eine bestimmte blog
Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende blogid
.
Liefert alle Werte für eine bestimmte category
Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende catid
.
Liefert alle Werte für eine bestimmte member
Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende memberid
.
Liefert alle Werte für eine bestimmte item
Option. Das Ergebnis ist ein assoziatives Array mit einem Eintrag für jede exitierende itemid
.
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) |
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
)
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
)
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
)
init()
auf.
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:
sql_table('item')
, statt auf einen festen Tabellennamens wie nucleus_item
zuzugreifen.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 {
...
}
?>
Falls dein Plugin eigene Datenbanktabellen benötigt, solltest du sie in der Funktion install
erzeugen und in unInstall
wieder entfernen.
Einige Hinweise
nucleus_plug_plugin-name
um Konflikte mit anderen Plugins zu vermeiden. Erzeuge die Namen mit sql_table('plug_plugname')
um sicherzustellen, dass sie mit den eingestellten, benutzerdefinierten Präfixen arbeiten.mysql_query()
machen.sql_connect()
am Ende deiner Funktion tun. Es könnte vorteilhaft sein, dies im Konstruktor bereits zu tun um ständiges neuverbinden zu vermeiden. Du solltest dann die Link-Id in $this->db
speichern und das jeder Anfrage als Parameter mitgeben.getTableList()
um sicher zu stellen, dass deine Tabelle gesichert wird, wenn die Backupfunktion von Nucleus benutzt wird.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.
Um einen Administrationsbereich zur Verfügung zu stellen sind folgende Schritte notwendig:
NP_Pluginname
heißt. Beachte das der Name kleingeschrieben wird!<?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();
?>
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'
)
);
}
function hasAdminArea()
{
return 1;
}
$strRel
in index.php
muss aktualisiert werden wenn sich dein Plugin nicht im Verzeichnis nucleus/plugins/
befindet.Der Sinn von PluginAdmin
ist es, dir zu helfen. Einmal erstellt, kannst du $oPluginAdmin->plugin
aufrufen um Objektinstanzen deines Plugins zu erhalten.
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.
Um eine Hilfeseite zur Verfügung zu stellen sind folgende Schritte notwendig:
NP_Pluginname
heißt. Beachte das der Name kleingeschrieben wird! Das ist praktisch daselbe Verzeichnis, wie für den Administrationsbereich.<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>
supportsFeature('HelpPage')
:
function supportsFeature($what) {
switch($what) {
case 'HelpPage':
return 1;
default:
return 0;
}
}
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.
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.