phpChrystal :: SDK :: Template-Erstellung
1. Einführung
Ein großes Feature von phpChrystal ist, dass man mit einem Mausklick verschiedene Themes aktivieren kann, die dann sofort das Darstellungsbild des kompletten Intranetsystems ändern.
Dementsprechend besitzt du die Möglichkeit, dass du das Design deiner Website (z.B. die deines Clans) als Vorlage für das Intranetsystem verwendest.
Damit dies gelingen kann, brauchst du keine PHP-, XML- oder JavaScript-Kenntnisse, sondern musst nur etwas von HTML und Stylesheets verstehen.
2. Must-Have
Zuersteinmal musst du im Ordner /templates einen weiteren Unterordner mit dem Namen deines Themes bzw. der Adresse deiner Website erstellen. Wichtig ist dabei, dass der Unterordner mit "sites." beginnt. Dies kennzeichnet den Ordner als Vorlage für Themes. Im Endeffekt existiert nun z.B. ein Ordner /templates/sites.net.myclanpage.

In diesem Ordner müssen mindestens die folgenden vier Dateien existieren:

  • pref.xml - Diese Datei enthält alle wichtigen Einstellungen für das Design
  • my.header - Diese Datei enthält z.B. JavaScript-, oder zusätzlichen Meta-Code
  • my.body - Diese Datei beinhaltet den restlichen HTML-Code, der auf der Seite eingebunden wird.
  • my.footer - Abschließnder HTML-Code, wie z.B. Copyrights etc.
Noch eine Anmerkung zu JavaScript-Dateien: Diese sollten möglichst in das Verzeichnis /scripts entpackt werden, da so die Pfad-Angaben nicht weiter angepasst werden müssen.
3. pref.xml
Wie schon oben gesagt, enthält die Datei pref.xml alle wichtigen Einstellungen die das Design und den Autor betreffen.
Am einfachsten machst du es dir, wenn du dir diese Datei in dein /template/sites.net.myclanpage-Ordner kopierst, und die jeweiligen Stellen ersetzt.
Nun aber die Beschreibung zu den einzelnen Tags
design - Attribut "desc"Beschreibung des Themes
design - Attribut "version"Version des Themes
design - Attribut "language"Sprache des Themes
design - Attribut "url"Falls der Theme aus dem Internet übernommen wurde, wird hier die Adresse der Website eingetragen
author - Attribut "name"Der Entwickler dieses Themes
author - Attribut "url"Die Homepage des Entwicklers
author - Attribut "email"Email-Adresse
author - Attribut "icq"ICQ-Nummer
js_based - Attribut "bool"(true|false) Legt fest, ob im Theme Javascript-Code eingebunden ist
sep - Attribut "pre"Seperator vor den einzelnen Linktexten. Dieser Seperator wird in das <a>-Tag eingeschlossen
sep - Attribut "post"Seperator nach den einzelnen Linktexten. Dieser Seperator wird in das <a>-Tag eingeschlossen
sep - Attribut "normal"Seperator zwischen einzelnen Links. Dieser Seperator wird NICHT in das <a-Tag eingeschlossen
subjectÜberschrift der Website
bannerPfad zur Banner-Datei. Falls leer, wird das originale Chrystal-Banner verwendet
add_phpfileWerden PHP-Dateien eingebunden
diag_bgcolorHintergrundfarbe der Diagramme (z.B. Voting)
diag - Attribut "fcolor"Balkenfarbe der Diagramme (z.B. Voting)
diag - Attribut "bgcolor"Hintergundfarbe der Diagramme (z.B. Voting)
table - Attribut "cellpadding"Cellpadding der inneren Tabelle
diag - Attribut "cellspacingr"Cellspacing der inneren Tabelle
diag - Attribut "border"Rahmen der inneren Tabelle
diag - Attribut "width"Breite der inneren Tabelle
Für den Fall, dass du bei <sep_normal> ein HTML-Tag einbinden willst, und nicht mit CDATA arbeiten willst, kannst du stattdessen folgendes Macro verwenden:
		    XML::XML2HTML (p)
		  
Dies würde z.B. dafür sorgen, dass zwischen den einzelnen Links ein Absatz (<p>) erscheinen würde.
3. my.header
In der my.header wird, wie schon erwähnt, zusätzlicher HTML-Code oder Meta-Tags eingetragen. So kann man z.B. dynamische Effekte mittels Javascript erzielen.
4. my.body
Die Datei my.body enthält zusätzliche Layer, z.B. mit Grafiken etc.
5. my.footer
Die Datei my.footerr enthält abschließende Informationen, z.B. Tabellenenden, Copyrights etc.
6. XML-Makros
XML::SITE::TITELWird durch den Titel der Seite ersetzt
XML::SITE::METAWird durch die Meta-Tags von phpChrystal ersetzt
XML::SITE::JAVAWird durch die JavaScript-Tags von phpChrystal ersetzt
XML::SITE::CSSWird mit der aktuellen CSS-Datei ersetzt
XML::SITE::BANNER::CHRYSTALWird durch das Chrystal-Logo ersetzt
XML::SITE::BANNER::SUBMENUWird durch die Grafik ersetzt, die in der XML-Config angegeben wurde
XML::SITE::H1Wird durch die Überschrift von phpChrystal ersetzt
XML::SITE::QUICKINFOWird durch die Quickinfoleiste von phpChrystal ersetzt
XML::SITE::NAVIGATWird mit der Naviagtionsleiste ersetzt
XML::SITE::ADMINBOXWird durch die Administrationsbox ersetzt
XML::SITE::MENUWird mit der Naviagtionsleiste ersetzt
XML::SITE::VOTINGWird durch die aktuelle Votingauswahl ersetzt
XML::SITE::LINK::SEP::NORMALWird durch den Standard-Linkseperator ersetzt
XML::SITE::LINK (<Linkname>)Erzeugt einen Link zum Modul mit dem angegebenem Namen. Wichtig dabei. Falls der angezeigte Name vom Intranet-Administrator geändert wurde, wird der Link nicht angezeigt. Abhilfe schafft das Ändern des XML-Tags.
XML::SITE::LOGIN (<Logintext>)Wird durch den Link zum Loginbereich ersetzt. Dabei wird als Linkname der angegebene Text verwendet
XML::PHP::INCLUDE (<Datei>)Lädt eine PHP-Datei mit Funktionen. Diese muss im gleichen Ordner wie das Template liegen.
XML::PHP::CTEMPLATE::OPTS (key=>val,)Setzt die Optionen für einen komemnden Funktionsaufruf. Vorherige Optionen werden geundeft. Wichtig: Das Kommata muss am Ende vorhanden sein!
XML::PHP::CTEMPLATE::FUNC (<Function>)Ruft eine Funktion mit den vorher gesetzten Opts in der includeten Datei auf
XML::PHP::VAR (<setting>)Liefert den in der Datenbank gespeicherten String für diese Variable zurück
XML::SITE::NEWS ($m_length,$m_maxnews,$m_sep)Dieses Makro lädt $m_maxnews aus der Datenbank und kürzt sie auf die Buchstabenlänge von $m_length (wird nicht bei $m_length eintragen, wird die News nicht gekürzt). $m_sep beschreibt den Seperator zwischen den News.
4. spezifische PHP-Datei
Durch die XML-Klassentags XML::PHP kann man, wie oben geschrieben, PHP-Dateien einbinden und Funktionen aufrufen.
Damit die PHP-Datei richtig eingebunden wird, ist folgendes zu beachten:
  • Die Hauptklasse der PHP-Datei MUSS CTemplate sein.
  • Alle Funktionen, die aufgerufen werden, müssen ihre Argumente durch ein Array übergeben bekommen.
  • Alle Funktionen müssen einen Wert zurückliefern. Dabei kann der Wert durch einen Booleschen Operator, durch eine Zeichenkette o.ä. repräsentiert werden.
Eine Beispieldatei findest du hier