zEvolutions
Zephyr Dateisystem - Druckversion

+- zEvolutions (https://ze-chat.de)
+-- Forum: Offtopic (https://ze-chat.de/forumdisplay.php?fid=17)
+--- Forum: General Talk (https://ze-chat.de/forumdisplay.php?fid=18)
+--- Thema: Zephyr Dateisystem (/showthread.php?tid=368)



Zephyr Dateisystem - Zion - 04.01.2016

Im Chat hatte ich es bereits angekündigt, hier bestimmt auch irgendwo Wink Eine kleine Exkursion zum Thema Dateisystem im Zephyr.

Vorweg: Dieses richtet sich an jene unter euch, die tiefer gehen wollen, als auch an die Designer.


Alle Dateien laufen, ähnlich wie auch schon in den Versionen davor, durch die index.php - hier müssen im inc-Switch eure Dateien eingetragen werden.

[attachment=137]

$TPL_DONT gibt an, ob am Ende ein Template (.zyr) geladen und ausgegeben werden soll oder nicht, gefolgt vom Namen der etwaigen Template-Datei und schlussendlich noch die zu ladende PHP.
Soll zB nur ein AJAX-Call gemacht werden, so wird $TPL_DONT auf 1 gestellt.

In der PHP-Datei geht es wie folgt weiter. (Hier nutzen wir mal die news.inc.php da diese noch einige Besonderheiten aufweist).

[attachment=138]

1 -> Sollte eure Erweiterung schon direkt im Startbildschirm geladen werden (frontpage), so ist dieser erste Schritt, als auch der dritte Schritt notwendig.

2 -> Denn hier wird die Templateengine initialisiert. 

3 -> siehe 1.

4 -> Ab hier beginnt gewöhnlicher PHP Code. Einbinden von Klassen und der gleichen.

5 -> Zu guter letzt übergeben wir die Ergebnisse aus dem Vorschritt an das Template selbst. Dabei können wir sowohl einzelne Variablen, als auch ganze Arrays und multidimensionale Arrays übergeben.


In den Template-Dateien selbst stehen uns nun einige Mittel offen. Zuerst jedoch sollte man sich klar darum sein, welcher Art die Erweiterung sein soll. Das Zephyr-Framework bietet drei Arten der Darstellung an. Tab, Sidebox und Dialog. Je nachdem, was dargestellt werden soll, sieht die erste Zeile anders aus. (Es werden keine <html>, <head> oder <body> Tags verwendet)

Code:
<div id="newsholder" class="tabcon" data-reloadable="true">

Code:
<div id="onlinelist" class="widget side" data-reloadable="true">

Code:
<div id="registerbox" data-width="313">

Die class tabcon definiert (wer hätte es gedacht) einen Tab. "widget side" ist für die Sideboxen und schlussendlich noch den Dialog. Soll ein Tab bei einem System-reload aktualisiert werden (zB weil ihr das Permission System in eurem Code verwendet), wird der data-tag reloadable benötigt. Die Breite eures Dialogs kann mit data-width angepasst werden.

Kehren wir zu den News zurück.

[attachment=139]

In Zeile drei sehen wir ein Werkzeug der Templateengine, den loop. Dieser ist im Grunde nichts weiter, als eine klassische foreach Schleife. (In einem Loop wird {$value.KEY} genutzt, gewöhnliche Variablen dagegen nutzen {$varname}) Auch if-Abfragen sind möglich {if="$var>='3'"}{/if}.

Ab Zeile 14 wird die zugehörige JavaScript-Datei eingebunden. Um ein ungewolltes neuladen der Datei zu unterbinden, werden jedoch ein paar Zeilen mehr benötigt. In der reset.js wird dieser Eintrag schliesslich zurück gesetzt.

Vor dem Laden der eigentlichen Datei (Zeile 16) können natürlich noch Sprachvariablen aus der PHP Datei über das Templatesystem an die JavaScript Datei übergeben werden.

Code:
     var Onlinebox_Lang = {accban:"{$accban}",
                           admin:"{$admin}",
                           alert:"{$alert}",
                           confuse:"{$confuse}",
                           friendship:"{$friendship}",
                           ignore:"{$ignore}",
                           information:"{$information}",
                           kick:"{$kick}",
                           mail:"{$mail}",
                           modify:"{$modify}",
                           move:"{$move}",
                           mute:"{$mute}",
                           openprofil:"{$openprofil}",
                           parole:"{$parole}",
                           recolor:"{$recolor}",
                           report:"{$report}",
                           stick:"{$stick}",
                           talkprivate:"{$talkprivate}",
                           talkto:"{$talkto}",
                           unmute:"{$unmute}",
                           unstick:"{$unstick}",
                           userban:"{$userban}",
                           warn:"{$warn}",
                           whisper:"{$whisper}"};
     loadJSFile('./js/onlinelist.js');

Gut... ich hoffe das reicht so erstmal Wink