Backend Themes
Themes sind für das Backend das, was Templates für das Frontend sind. Die Nomenklatur stammt noch von WebsiteBaker, aus der Zeit, als das Backend auf Templates umgestellt wurde und man eine Möglichkeit brauchte, Backend-Designs von Frontend-Designs zu unterscheiden.
Grundprinzip
Für jeden Backend-Bereich - also z.B. "Media", "Admin-Tools", "Addons" - wird ein Template benötigt, welches die Darstellung des Bereichs steuert. Wir verwenden für die Namensgebung eine feste Namenskonvention:
backend_<Bereich>.tpl
<Bereich> entspricht hierbei dem Namen der Route, also z.B. "media", "admintools" oder "addons". Beispiel:
backend_media.tpl
Zudem entspricht die Verzeichnisstruktur von Backend Themes der von Frontend Templates.
./templates/themename /css /js /templates /default /backend_addons.tpl /backend_admintools.tpl /backend_media.tpl /...
Darüber hinaus können beliebige weitere Templatedateien vorhanden sein, die jedoch nicht automatisch vom Core geladen und verwendet werden.
Was hat es mit dem Verzeichnis "default" auf sich?
Jedes Template, Theme und Modul braucht jeweils eine Standarddarstellung. Um es dem Administrator aber zu ermöglichen, eigene Anpassungen updatesicher vorzunehmen, können parallel dazu sogenannte Varianten angelegt werden. Hierzu legt man parallel zum Verzeichnis "default" ein neues Unterverzeichnis mit einem beliebigen Namen an, z.B. "myvariant". Dorthin kopiert man diejenigen Templates, die man verändern möchte - und nur die!
Weitere Erläuterungen folgen später.
Bereichs-CSS und -JS automatisch laden
Das Backend verwendet in der Regel wesentlich mehr Javascript als das Frontend; dazu kommt, daß manche Anpassungen oder Erweiterungen nur bestimmte Bereiche des Backends betreffen. So wird beispielsweise das File-Upload-Plugin nur im media-Bereich benötigt; es wäre daher unnötiger Ballast, es auch auf allen anderen Seiten zu laden.
Im Backend wird daher automatisch nach einer Datei <Bereich>.css bzw. <Bereich>.js gesucht. Wird eine solche Datei gefunden, wird diese automatisch in die Seite geladen.
Für Javascript funktioniert das auch für das Laden in den Seiten-Footer, analog zu frontend_body.js: <Bereich>_body.js
Aktuellen Backend-Bereich ermitteln (PHP)
Um den Namen des aktuellen Bereichs zu ermitteln - z.B. in der headers.inc.php oder footers.inc.php -, stellt der Backend-Controller die Methode getArea() zur Verfügung. Beispiel:
if(CAT_Backend::getArea() == 'media') { // do something }
Pflichten
JavaScript-Funktionen
Da es vorkommen kann, dass etwa Module auf Funktionen des Themes zugreifen müssen, gibt es einige JavaScript-Methoden, die jedes Theme zur Verfügung stellen muß.
Das BackStrap Backend Theme verwendet Bootstrap Growl für kleinere Rückmeldungen. (Wer BlackCat Version 1.x kennt, kennt die kleinen blauen Hinweise unten links im Backend. Growl ist sowas ähnliches.) Um Modulen einen einheitlichen Umgang mit solchen Meldungen zu erleichtern, muß jedes Theme eine entsprechende JavaScript Funktion mitbringen.
Verwendet wird diese Methode zum Beispiel im Dashboard vom Logdateien-Widget.
Der zweite Parameter (Standard: true) bestimmt, ob es sich um eine positive Meldung oder eine Fehlernachricht handelt. In letzterem Fall wird dieser Parameter auf false gesetzt. Inwieweit die Funktion diesen zweiten Parameter benutzt, ist dann im Theme zu dokumentieren.
Im einfachsten Fall kann die Methode einen JavaScript-Alert verwenden und den zweiten Parameter ignorieren:
function BCGrowl(message,success=true) {
alert(message);
}