Benutzerdefinierten Modul Chrome anwenden

From Joomla! Documentation

This page is a translated version of the page Applying custom module chrome and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎中文(台灣)‎

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.

Übergabe von Attributen an Modul Chrome von <jdoc:include />
<jdoc:include />Anweisung Ausgabe

<jdoc:include type="modules" name="user1" style="custom" />

<div>
  <h3><!-- Module title --></h3>

  <div class="blue">
    <!-- Module content -->
  </div>
</div>

<jdoc:include type="modules" name="user1" style="custom" background="green" />

<div>
  <h3><!-- Module title --></h3>

  <div class="green">
    <!-- Module content -->
  </div>
</div>

<jdoc:include type="modules" name="user1" style="custom" headerLevel="1" background="yellow" />

<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.