-
Notifications
You must be signed in to change notification settings - Fork 16
Custom Extensions
Dieser Artikel beschreibt, wie man eigene Entwicklungen/Features zu BNote hinzufügen kann. Dabei wird zunächst der generelle Aufbau von BNote erklärt und im Anschluss die einfachste Art der Erweiterung beschrieben - ein eigenes Modul.
Zunächst eine kurze Übersicht der Ordner-Struktur:
- config - enthält die 3 Konfigurationsdateien: Anwendungskonfiguration config.xml, Bandkontaktdaten company.xml und Datenbankzugang database.xml. Das Verzeichnis ist mit einer .htaccess Datei geschützt.
- data - enthält die unstrukturierten Daten der Anwendung wie z.B: Hilfetexte, Gallerie-Bilder, generierte PDFs, usw.
- src - enthält das Programm selbst bzw. die Logik der Anwendung.
- style - enthält die CSS-Styledefinitionen.
- lib - enthält die verwendeten Bibliotheken wie jQuery, jQuery UI, mobiledetect, simpletest, fpdf und tinymce.
Wie bereits erwähnt ist der src-Ordner der Kern der Anwendung. Diese ist nach dem klassischen MVC-Muster aufgebaut:
- data - Enthält die Logik und Definitionen für den Datenzugriff (Model)
- presentation - Enthält die Anzeige der Daten/Anwendung (View)
- logic - Enthält die Ablaufsteuerung und besondere Berechnungen und Zugriffe (Controller)
Jeder der Ordner enthält Dateien mit Logik für die gesamte Anwendung bzw. für alle Module und einen modules-Ordner mit der spezifischen Logik für ein Modul.
Zusätzlich gibt es im src-Ordner noch die Ordner export für Schnittstellen, print für Druckausgaben und tests für Testfälle.
Ein Modul ist für den Benutzer ein Eintrag in der Hauptnavigation und für den Entwickler ein Set mit mindestens einem View (Presentation) und einem Model (Data). Der Controller ist optional, da bei fehlendem Controller der Standardcontroller (defaultcontroller) verwendet wird.
- Datei src/presentation/modules/meinmodview.php mit Klasse
MeinmodView extends AbstractView
hinzufügen und die Methodestart()
implementieren oder zunächst leer lassen. - Datei src/data/modules/meinmoddata.php mit Klasse
MeinmodData
(optionalextends AbstractData
) hinzufügen. - In der Datenbanktabelle
module
eine Zeile mit dem NameMeinmod
hinzufügen.
Nun sollte das Modul in der Navigationsleiste erscheinen. Wenn nicht, dann muss dem Benutzer noch die Berechtigung für das neue Modul gegeben werden (in der UI: User -> Benutzer anwählen -> Berechtigungen).
Die Klasse Data
und Database
enthalten Methoden zum Zugriff auf die Datenbank. Innerhalb der Data-Komponente eines Moduls kann über $this->database
und eine der Methoden wie z.B. getCell(table, column, where)
oder getSelection(query)
die Datenbank abgefragt werden, wenn die Klasse von der Oberklasse AbstractData erbt. In den Annotationen zu den Methoden sind die Parameter und Rückgabewerte/typen beschrieben.
Um innerhalb eines Views auf Daten aus der Datenbank zuzugreifen, kann folgender Code verwendet werden:
$this->getData()
und dann eine der zur Verfügung stehenden Methoden. Jede public-Methode der Data-Komponente kann hier verwendet werden.
Es gibt 3 verschiedene Arten von Views:
- individuelle Views - sie erben von der Klasse
AbstractView
- einfache CRUD Views - sie erben von der Klasse
CrudView
(die vonAbstractView
erbt) - joined CRUD Views - sie erben von der Klasse
CrudRefView
(die vonCrudView
erbt).
CRUD steht für create read update delete und beschreibt damit die 4 Standardfunktionen auf Entitäten. Der Unterschied zwischen einem einfachen und einem referenzierten CRUD-View liegt darin, dass der referenzierte CRUD View automatisch die Fremdschlüssel auflöst und in UI-Elemente umwandelt.
Jeder individuelle View muss die Methode start()
(Einstiegspunkt des Moduls) überschreiben bzw. implementieren. Bei den anderen View-Typen ist der Konstruktor zu beachten. Die bereits implementierten Module können hierbei als Vorlage dienen.
Bei der UI-Implementierung wurde auf maximale Wiederverwendung geachtet und das Schreiben von HTML, CSS und JavaScript Code minimiert. Fast alle Elemente der BNote-UI sind als sogenannte Widgets im Order src/presentation/widgets untergebracht. So können Links (link), Fehlermeldungen (Error, Message), Formulare (Form), Editoren und Felder, Dateibrowser (Filebrowser), Tabellen (Table), Listen (Dataview, Box) usw. direkt in PHP definiert werden. Die Datenstrukturen sind dabei angepasst an die Datenbankzugriffsoperatoren.
Die Methode modePrefix()
liefert den Pfad zum aktuellen Modul zurück, also beispielsweise ?mod=12&mode=
. Es genügt also die aufzurufenden View-Methode an den Rückgabewerte zu konkatenieren um damit eine andere Methode im View aufzurufen. Für den Zurück-Button gibt es in den CRUD-Views entsprechende Standardmethoden. Hier jedoch ein Beispiel für eine einfach Navigation, z.B. in der start()-Methode:
$link = new Link($this->modePrefix() . "customDoing", "Individuelles Vorgehen"); $link->write();
ruft bei einem Klick auf diesen Butten die Methode customDoing()
des Views auf.
BNote wurde mit Eclipse entwickelt. Daher kann BNote als Eclipse-Projekt importiert werden.
Stand: 21.09.2020, BNote Version 3.4.4