Phynx Plugin-Erstellung
Aus phynx application framework
Bitte laden Sie von phynx.de die phynx-Version mit Demo-Plugin herunter.
Das Demo-Plugin ist extrem einfach und verdeutlicht einige grundlegende Konzepte:
Inhaltsverzeichnis |
Grundlagen
Ein Plugin ist normalerweise aufgebaut aus einer Tabelle in der Datenbank und einigen Dateien.
Datenbank
Damit ein phynx-Plugin auf eine Tabelle zugreifen kann, muss der Name der Tabelle einem PHP-Objekt entsprechen.
In diesem Fall muss es also eine Tabelle und ein Objekt Demo geben.
Zusätzlich muss es eine Spalte mit dem Namen der Tabelle, gefolgt von ID geben, also hier DemoID.
Diese Spalte sollte die Eigenschaften auto_increment und primary key haben und vom Typ INT(10) sein.
An die anderen Spalten in der Datenbank werden keine Anforderungen gestellt. Die Attribute der Klasse Demo werden automatisch erzeugt, wenn eine Zeile aus der Tabelle Demo ausgelesen wird.
Dateien
|--Demo
|--Demo
|--Demo.class.php
|--DemoGUI.class.php
|--mDemoGUI.class.php
|--demoLogo.png
|--mDemoPlugin.xml
Objekte
- Demo:
Der Ordner der Anwendung Demo - Demo:
Der Ordner des Plugins Demo - Demo.class.php:
class Demo extends PersistentObject {
}
Es werden Instanzen dieser Klasse erzeugt, wenn Zeilen aus der Tabelle Demo geladen werden, dazu später mehr.
- DemoGUI.class.php:
class DemoGUI extends Demo implements iGUIHTML2 {
function getHTML($id){
$this->loadMeOrEmpty();
$gui = new HTMLGUI();
$gui->setObject($this);
$gui->setName("Demo");
$gui->setStandardSaveButton($this);
return $gui->getEditHTML();
}
}
Dies ist die Interface-Klasse, die von der GUI instanziert wird.
Anschließend wird die Methode getHTML() aufgerufen, um den HTML-Code zu laden.
In diesem Fall wird automatisch aus den Attributen der Klasse Demo ein Formular erstellt, das es ermöglicht, sie zu editieren ($gui->getEditHTML()).
- mDemoGUI.class.php
class mDemoGUI extends anyC implements iGUIHTML2 {
public function getHTML($id){
$gui = new HTMLGUI();
$gui->VersionCheck("mDemo");
$this->lCV3($id);
$gui->setName("Demo");
$gui->setObject($this);
$gui->hideAttribute("DemoID");
try {
return $gui->getBrowserHTML($id);
} catch (Exception $e){ }
}
}
Die Klasse mDemoGUI erweitert anyC und ist damit eine Collector-Klasse.
Ein Collector ist eine Liste von Objekten. In diesem Fall von Demo-Objekten.
Zu dieser Liste kann mit der HTMLGUI-Klasse einfach HTML-Code erzeugt werden, der automatisch einen editieren-Knopf erhält und die DemoGUI-Klasse aufruft.
Sonstige
- demoLogo.png:
Das Logo, das links oben angezeigt wird. Es muss in der Anwendungs-Beschreibung angegeben werden.
Plugin-Datei
mDemoPlugin.xml:
<phynx> <plugin> <name>Demo</name> <menuName>Demo</menuName> <collection>mDemo</collection> <icon>./images/navi/tea.png</icon> <folder>Demo</folder> <version>0.1</version> <adminOnly>false</adminOnly> </plugin> </phynx>
Eine Beschreibung des Plugins, damit phynx es laden kann.
- name ist der Name der Klasse, deren collection mDemo ist.
Also mDemo beinhaltet immer Listen von Demo-Objekten. Außerdem wird collection geladen, wenn man oben auf das Tab drückt, das den Titel menuName hat. - icon ist selbsterklärend.
- folder ist der relative Pfad zum Ordner des Plugins (ausgehend vom Anwendungs-Ordner Demo).
Er kann also auch ../plugins/Demo lauten, falls das Plugin im allgemeinen plugins-Verzeichnis liegt. - version muss der Version der Anwendung entsprechen, wie in der Anwendungs-Datei angegeben.
- adminOnly: Wird das Plugin angezeigt, wenn man als Admin oder als Benutzer eingeloggt ist?
Anwendung
Anwendungs-Dateien befinden sich im Verzeichnis applications und haben folgenden Aufbau (Beispiel demoApplication.class.php):
class demoApplication {
public function registerName(){
return "Demo";
}
public function registerFolder(){
return "Demo";
}
public function registerIcon(){
return "./Demo/Demo/demoLogo.png";
}
public function registerVersion(){
return "0.1";
}
}
Der Aufbau ist recht einfach:
- registerName:
Legt den Namen der Anwendung fest, sollte derzeit identisch mit registerFolder sein. - registerIcon:
Das Symbol der Anwendung links oben. - registerVersion:
Die Version der Anwendung, die mit der Version der Plugins verglichen wird.