Benutzerdefinierten Modul Chrome anwenden
From Joomla! Documentation
Um benutzerdefinierten Module Chrome in einem Template zu definieren, muss eine Datei mit dem Namen modules.php in dem Verzeichnis html des Templates erstellt werden. Das könnte zum Beispiel PATH_TO_JOOMLA/templates/TEMPLATE_NAME/html/modules.php sein.
In dieser Datei sollte eine Funktion mit dem Namen modChrome_STYLE
definiert werden, wobei 'STYLE
' der Name des benutzerdefinierten Moduls Chrome ist. Diese Funktion übernimmt, wie gezeigt, drei Argumente, $module
, &$params
und &$attribs
:
<?php
function modChrome_STYLE( $module, &$params, &$attribs )
{
/* chromed Modulausgabe folgt hier */
}
?>
Innerhalb dieser Funktion können alle verfügbaren Moduleigenschaften (d.h. die Felder in der Tabelle jos_modules
in der Joomla-Datenbank auf dem Server) für dieses Modul verwendet werden. Die am Wichtigsten benötigten sind vermutlich $module->content
, $module->showtitle
und $module->title
. $module->showtitle
ist eine boolesche Variable, ist also entweder true (wenn der Modultitel angezeigt werden soll) oder false (wenn er nicht angezeigt werden soll). $module->content
und $module->title
geben den Hauptmodulinhalt bzw. den Modultitel zurück.
Die Funktion ist eine normale PHP-Funktion und kann daher jeden normalen PHP-Code verwenden. Ein gängiges Beispiel ist die Verwendung einer if
-Anweisung, um den Wert von $module->showtitle
zu prüfen und dann den Titel entsprechend einzubinden oder nicht:
<?php
if ($module->showtitle)
{
echo '<h2>' .$module->title .'</h2>';
}
?>
Der Zugriff auf die Modulparameter erfolgt über das Objekt $params
. So ist es z.B. möglich, einem Modul im Backend der Joomla!-Seite ein Modulklassensuffix zuzuweisen; dieses wird dann in den Parametern für dieses Modul als moduleclass_sfx
gespeichert. Um ein <div>
mit einer Klasse
zu erstellen, die durch das Modulklassensuffix bestimmt wird, würde man folgendes verwenden:
<div class="<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<!-- div contents -->
</div>
Benutzerdefinierte Chrom-Attribute
Es ist auch möglich, weitere Attribute an die Funktion Modul Chrome zu übergeben, indem Sie die gleiche <jdoc:include />
-Anweisung verwenden, die das Modul Chrome setzt. Diese zusätzlichen Attribute können beliebig sein und werden in dem Array $attribs
gespeichert. Das folgende Beispiel zeigt die Funktion "Module chrome":
<?php
function modChrome_custom( $module, &$params, &$attribs ) {
if (isset( $attribs['headerLevel'] ))
{
$headerLevel = $attribs['headerLevel'];
} else {
$headerLevel = 3;
}
if (isset( $attribs['background'] ))
{
$background = $attribs['background'];
} else {
$background = 'blue';
}
echo '<div class="' .$params->get( 'moduleclass_sfx' ) .'" >';
if ($module->showtitle)
{
echo '<h' .$headerLevel .'>' .$module->title .'</h' .$headerLevel .'>';
}
echo '<div class="' .$background .'">';
echo $module->content;
echo '</div>';
echo '</div>';
}
?>
Man würde dann die Werte für background
und headerLevel
in der <jdoc:include />
-Anweisung wie unten gezeigt setzen. Wenn keine Werte gesetzt werden, sind die Attribute standardmäßig auf "blau" bzw. "3" eingestellt.
<jdoc:include /> Anweisung
|
Ausgabe |
---|---|
|
<div>
<h3><!-- Module title --></h3>
<div class="blue">
<!-- Module content -->
</div>
</div> |
|
<div>
<h3><!-- Module title --></h3>
<div class="green">
<!-- Module content -->
</div>
</div> |
|
<div>
<h1><!-- Module title --></h1>
<div class="yellow">
<!-- Module content -->
</div>
</div> |
Weitere Informationen zur Übergabe von Attributen an Modul chrome sind unter jtopic:115953 zu finden.