Beispiele für Joomla Modul Chromes
In unserem Tutorial zu den Joomla Module Chromes erklären wir Ihnen die Joomla Module Chromes und zeigen wie Sie Ihren eigenen Modul Chrome erstellen. In diesem Tutorial möchten wir Ihnen weitere Beispiele der Joomla Modul Chromes vorstellen.
Beispiel 1) Erstes und letztes Modul einer Modulposition
Adrians Frage zu unserem Joomla Tutorial "Template Befehle" brachte mich dazu darüber nachzudenken, wie man das erste und letzte Modul einer Modulposition mit den Klassennamen "first" und "last" versehen kann, um diese besonders zu stylen.
Voraussetzung für dieses Tutorial sind leichte Grundkenntnisse in PHP, HTML, CSS, aber vorallem die Kenntnis der Funktionsweise von Joomla Modul Chromes.
Wer trotz PHP,HTML und CSS Kenntnisses bei diesem Tutorial nur "Bahnhof versteht", dem sei zur Lektüre unser Tutorial über die Joomla Modul Chromes ans Herz gelegt.
Leider funktioniert $module->ordering innerhalb eines Module Chromes nicht, so dass andere Lösungen gefunden werden mussten.
Natürlich kann man dabei auf Javascript, vorallem auf das Mootools Framework zurückgreifen oder einfach eine Modulposition vor und eine nach der in Rede stehenden Position einfügen. Mir ging es allerdings genau um die Lösung der von Adrian gestellten Frage.
Der Lösungsgedanke war folgender:
Man braucht eine Schleife um das erste und letzte Modul auf der in Rede stehenden Position (bspw. user1) zu ermitteln.
Im Kern rendere ich also die Module in der index.php des Templates manuell, erhalte so eine nutzbare foreach Schleife und kann das attribut "position", welches den Klassennamen (first/last) enthält, an die Chrome Funktion übergeben.
Grundstein dieser Lösung ist die Tatsache, dass man Module im Template (wie übrigens auch in Komponenten) nicht mit dem jdoc:include... Befehl laden muss, sondern diese mit nachfolgendem Code auch "manuell rendern" kann. Der Code wird an der Stelle in der index.php eingefügt, an der normalerweise der jdoc:include Befehl stünde.
Module der index.php des Templates manuell rendern
$document = &JFactory::getDocument();
$modules = &JModuleHelper:: getModules( 'user1');
$renderer = $document->loadRenderer('module');
foreach($module s as $mod) {
echo $renderer->render($mod, array('style' => 'xhtml'));
}
?>
Soweit so gut. Bisher werden die Module noch "ganz normal" ausgegeben. Erst jetzt kommen die Anpassungen:
Attribut erstellen und an Chrome Funktion übergeben
Mit Hilfe der Foreach Schleife kann man ermitteln, welches das erste bzw. letzte Modul der Modulposition ist. Wenn es sich um das erste Modul handelt, soll das das Modul umgebene Div die Klasse "first", beim letzten Modul die Klasse "last" erhalten. Diese Information übergeben wir der Chrome Funktion mit Hilfe eines Attributes "position", welches im Array $attribs gespeichert wird.
Der fertige Code in der index.php sieht nun so aus:
$document = &JFactory::getDocument();
$modules = &JModuleHelper::getModules('user1');
$renderer = $document->loadRenderer('module');
/* Modul Style */
$style = 'xhtml';
/* Module zählen */
$count = count($modules);
$i = 0;
/* Foreach Schleife */
foreach($modules as $mod) {
/* Erstes bzw. letztes Modul der Position */
switch($i) {
case '0': $position = 'first';
break;
case ($count-1): $position = 'last';
break;
default: $position = '';
}
/* Modul "manuell rendern" und position als attribut übergeben. */
echo $renderer->render($mod, array(
'style' => $style,
'position' => $position
));
$i++;
}
?>
Änderungen in der Chrome Funktion
Die Änderungen in der Chrome Funktion sind vergleichsweise gering und schnell umgesetzt. Dort muss man nur noch das Attribut, welches entweder den Wert "first", "last" oder "" hat, als Klassennamen eines HTML Elementes ausgeben.
Beispiel 2) Joomla Slider in Modul
Ein weiteres schönes Beispiel für die Nutzung von Joomla Modul Chromes sind die aus dem Administrationsbereich bekannten Mootools Slider, die per Klick den Inhalt des Moduls ein bzw. ausblenden.
Ohne viel dazu zu schreiben, hier der Code:
{
jimport('joomla.html.pane');
$sliders = & JPane::getInstance('sliders');
$sliders->startPanel( JText::_( $module->title ), 'module' . $module->id );
echo $module->content;
$sliders->endPanel();
}


Kommentare
Also ich hab den Code ausprobiert und er funktioniert super. Was ich noch ein bisschen störend finde ist die mega Länge. Wenn der Code an jeder Module-Position stehen würde, dann wäre die index.php ziemlich lang und unübersichtlich . Hab versucht das ganze in eine function zu packen und mit parameter ($modulePositio n, $moduleStyle) aufzurufen. Dann wird aber leider garnichts mehr gerendert. Was muss man beachten wenn man die paar Zeilen auslagern will?