erstmal ein Lob an die Entwickler von Redaxo und den Addons/Modulen. Ich verwende Redaxo nun schon seit vielen Jahren und bin sehr zufrieden!
Als ich letztens meine Webseite optimieren wollte habe ich mich geärgert, dass es keine elegante Methode gibt (mir ist zumindest keine bekannt) die CSS/JS-Dateien dynamisch (onDemand) in die Templates einzubinden.
Ich habe ein Modul "Galerie", welches die Javascript-Librarys jQuery und Slimbox, sowie eine galery.css und eine slimbox.css benötigt.
Diese habe ich fest im head des Templates verlinkt -> Folge: Auch auf Seiten auf denen ich keine Galerie anzeige werden diese dateien geladen.
Kurz gesagt: Spezielle Module benötigen spezielle JS/CSS-Dateien und ich will diese nur laden, wenn das entsprechende Modul im Artikel eingebunden ist.
Also habe ich mir eine kleine Lösung für das Problem ausgedacht:
Ich habe mir ein Template mit dem folgenden Code angelegt: (das Angelegte Template hat die ID 10 und das galerie-Modul die ID 13)
Code: Alles auswählen
<?php
$article = OOArticle::getArticleById(REX_ARTICLE_ID);
$REX['USED_MODULES'] = array();
for ($slice = OOArticleSlice::getFirstSliceForArticle(REX_ARTICLE_ID); $slice != null; $slice = $slice->getNextSlice()) {
$REX['USED_MODULES'][$slice->getValue('modultyp_id')] = true;
}
?>
Code: Alles auswählen
REX_TEMPLATE[10]
...
<head>
...
<?php if($REX['USED_MODULES'][13] == true) {?>
<link href="<?php echo $REX['HTDOCS_PATH'] ?>files/gallery.css" rel="stylesheet" type="text/css" />
<link href="<?php echo $REX['HTDOCS_PATH'] ?>files/slimbox/slimbox2.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="files/addons/jquery_ui/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="files/slimbox/slimbox2.js"></script><?php } ?>
...
</head>
...
Gibt es da eventuell schon elegantere Lösungen?