Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faq:modules:variants [2014/08/08 10:57] shadowcat angelegt |
faq:modules:variants [2015/02/16 00:00] (aktuell) |
||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
* Ändert sich die ID der Seite, muss das Template angepaßt werden. | * Ändert sich die ID der Seite, muss das Template angepaßt werden. | ||
* Es funktioniert nur mit CSS- und/oder JS-Dateien, jedoch nicht mit kompletten Ausgabe-Templates. | * Es funktioniert nur mit CSS- und/oder JS-Dateien, jedoch nicht mit kompletten Ausgabe-Templates. | ||
+ | * Ausgabe-Templates können nur direkt im ''templates''-Verzeichnis geändert werden. Das gilt dann aber für alle Instanzen des Moduls. Außerdem werden diese Anpassungen bei einem Update des Moduls überschrieben. | ||
BlackCat CMS verfügt daher über die Möglichkeit, **Varianten** zur Verfügung zu stellen. Das gilt für Module ebenso wie für Templates. Das Grundprinzip hierbei ist folgendes: | BlackCat CMS verfügt daher über die Möglichkeit, **Varianten** zur Verfügung zu stellen. Das gilt für Module ebenso wie für Templates. Das Grundprinzip hierbei ist folgendes: | ||
Zeile 14: | Zeile 15: | ||
* Auf Basis dieser Standarddarstellung können weitere Varianten abgeleitet werden. | * Auf Basis dieser Standarddarstellung können weitere Varianten abgeleitet werden. | ||
* Varianten können auch eine komplett andere Darstellung beinhalten. | * Varianten können auch eine komplett andere Darstellung beinhalten. | ||
+ | * Bei einem Update wird nur das Standard-Verzeichnis überschrieben, nicht jedoch die selbst erstellten Varianten. | ||
===== Templates mit Varianten ===== | ===== Templates mit Varianten ===== | ||
Zeile 59: | Zeile 61: | ||
<WRAP center round tip 100%> | <WRAP center round tip 100%> | ||
**Die Besonderheit:** Fehlt im Verzeichnis ''myvariant'' ein Template, wird dieses automatisch aus dem Verzeichnis ''default'' genommen. Man muss also wirklich nur diejenigen Dateien kopieren, die auch wirklich angepaßt werden sollen! | **Die Besonderheit:** Fehlt im Verzeichnis ''myvariant'' ein Template, wird dieses automatisch aus dem Verzeichnis ''default'' genommen. Man muss also wirklich nur diejenigen Dateien kopieren, die auch wirklich angepaßt werden sollen! | ||
+ | </WRAP> | ||
+ | |||
+ | ===== index.php für Templates mit Varianten ===== | ||
+ | |||
+ | Die ''index.php'' sieht für Template prinzipiell immer gleich aus. (Im folgenden Beispiel wurde wegen der besseren Lesbarkeit der Kopfteil mit Copyright und ''class.secure.php'' weggelassen.) | ||
+ | |||
+ | <sxh php> | ||
+ | // vom Admin ausgewählte Variante auslesen | ||
+ | $variant = CAT_Helper_Page::getPageSettings($page_id,'internal','template_variant'); | ||
+ | // falls keine gewählt wurde, Fallback auf 'default' | ||
+ | if(!$variant) | ||
+ | $variant = ( defined('DEFAULT_TEMPLATE_VARIANT') && DEFAULT_TEMPLATE_VARIANT != '' ) | ||
+ | ? DEFAULT_TEMPLATE_VARIANT | ||
+ | : 'default'; | ||
+ | // dem Template Parser die Variante als Hauptpfad übergeben | ||
+ | $parser->setPath(CAT_TEMPLATE_DIR.'/templates/'.$variant); | ||
+ | // für dort nicht vorhandene Templates 'default' als Fallback setzen | ||
+ | $parser->setFallbackPath(CAT_TEMPLATE_DIR.'/templates/default'); | ||
+ | // das Template ausgeben | ||
+ | $parser->output('index.tpl',array()); | ||
+ | </sxh> | ||
+ | |||
+ | (Anmerkung: Zur Sicherheit könnte man noch eine Prüfung einbauen, ob das Varianten-Verzeichnis existiert.) | ||
+ | |||
+ | ===== Die Variante zur Auswahl stellen ===== | ||
+ | |||
+ | BlackCat CMS bietet die Varianten im Backend automatisch in Form einer Selectbox an, wenn diese in der ''info.php'' konfiguriert sind. Beispiel: | ||
+ | |||
+ | <sxh php>$template_variants = array( 'default', 'myvariant' );</sxh> | ||
+ | |||
+ | Anmerkung: Natürlich könnte auch einfach eine Liste der Unterverzeichnisse unterhalb von ''templates'' angeboten werden, das könnte aber zu 'false-positives' führen, wenn man z.B. eine Sicherungskopie eines Templates erstellt hat, die eigentlich nicht für die Nutzung bestimmt ist. Daher werden nur die Varianten angeboten, die als solche konfiguriert sind. | ||
+ | |||
+ | ===== Angepaßtes CSS laden ===== | ||
+ | |||
+ | BlackCat CMS verfügt über eine einfache Namenskonvention, die das automatische Laden der 'richtigen' CSS-Datei ermöglicht. Der einfachste Weg ist, die zur Variante gehörende CSS-Datei im Verzeichnis ''./templates/<Templatename>/css/<Variante>'' abzulegen und ''template.css'' zu nennen. | ||
+ | |||
+ | Sollte eine komplexere Logik notwendig sein, kann dies über die Datei ''headers.inc.php'' implementiert werden. | ||
+ | |||
+ | Hinweis: Wird für eine Variante kein angepaßtes CSS benötigt, muss auch nicht das entsprechende Verzeichnis angelegt werden. | ||
+ | |||
+ | ===== Module mit Varianten ===== | ||
+ | |||
+ | Oben beschriebenes Vorgehen funktioniert grundsätzlich auch für Module. Die Variable in der ''info.php'' heißt in diesem Fall ''$module_variants'': | ||
+ | |||
+ | <sxh php>$module_variants = array( 'default' );</sxh> | ||
+ | |||
+ | ===== Kleiner Trick für dynamische Ermittlung der Varianten ===== | ||
+ | |||
+ | Die vorhandenen Varianten in der ''info.php'' als Liste anzugeben, wird für die meisten Fälle ausreichend sein. Will man es dem Benutzer aber erleichtern, eigene Varianten anzulegen, ohne daß er hinterher die ''info.php'' anpassen muß (die ja zudem bei einem Update überschrieben wird), kann man statt des "hartcodierten" Arrays folgenden Code benutzen: | ||
+ | |||
+ | <sxh php> | ||
+ | $module_variants = CAT_Helper_Directory::getInstance() | ||
+ | ->getDirectories( | ||
+ | CAT_PATH.'/modules/'.$module_directory.'/templates', | ||
+ | CAT_PATH.'/modules/'.$module_directory.'/templates/' | ||
+ | ); | ||
+ | </sxh> | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Achtung, der Slash am Ende des zweiten Parameters ist wichtig! | ||
</WRAP> | </WRAP> | ||