Joomla 1.5 - Alternative Templates für bestimmte Artikel

Joomla

Mit Joomla 1.5 gibt es viele Neuerungen, so auch eine die Möglichkeit Module und Komponenten mit eigenen Templates zu überladen. Überladen bedeutet, das Joomla nicht mehr das Standard-Template, sondern das eigene Template zur Darstellung des Inhaltes verwendet.Das, von Joomla mitgelieferte Template „beez“ ist ein gutes Beispiel für diese überladenen Templates. Im Unterverzeichnis „html“ des beez-Templateordners findet man viele, bereits überladene Templates für die unterschiedlichsten Module und Komponenten.

Will man aber zum Beispiel einem Artikel ein anderes Aussehen geben als den anderen, dann kann man dies zwar per CSS tun, doch hat man per CSS nur wenige Eingreifmöglichkeiten in Bezug auf die Anordnung des Inhaltes.

Um mehr Kontrolle über den Inhalt zu erhalten habe ich mir folgende Lösung ausgedacht und auch auf dieser Seite bereits erfolgreich implementiert.

 

Erweiterung der Artikel-Definition

Zu aller erst muss Joomla mitgeteilt werden, dass für einen Artikel ein anderes Template verwendet werden soll. Hierfür habe ich die Artikel-Definition (./administrator/components/com_content/models/article.xml) um drei Parameter erweitert.

Ich habe ab Zeile 89 folgende Parameter eingefügt:

  1. <param name="frontpage_template" type="text" label="Frontpage Template" description="PARAMFRONTPAGETEMPLATE" />
  2. <param name="item_template" type="text" label="Item Template" description="PARAMITEMTEMPLATE" />
  3. <param name="article_template" type="text" label="Article Template" description="PARAMARTICLETEMPLATE" />

Der erste Parameter “frontpage_template” bestimmt das Template, das verwendet werden soll, wenn der Artikel auf der Startseite angezeigt wird. Der zweite Parameter „item_template“ definiert das Template, das in der Blog-Ansicht einer Kategorie oder einer Section verwendet wird. Der dritte und letzte Parameter bestimmt das Template für den eigentlichen Artikel.

Anpassung der überladenen Templates

Die folgenden Anpassungen basieren auf dem Template „beez“. Am einfachsten ist es, wenn man sich den Ordner html/com_content aus dem beez-Templateverzeichnis in sein eigenes Template-Verzeichnis kopiert und dann modifiziert.

Hat man das Verzeichnis html/com_content erfolgreich kopiert, dann sollte dies wie folgt aussehen:

html/com_content
    |
    + /article
    |    + default.php
    |    + form.php
    |    + index.html
    |
    + /category
    |    + blog.php
    |    + blog_item.php
    |    + blog_links.php
    |    + default.php
    |    + default_item.php
    |    + index.html
    |
    + /frontpage
    |    + default.php
    |    + default_item.php
    |    + default_links.php
    |    + index.html
    |
    + /section
        + blog.php
        + blog_item.php
        + blog_links.php
        + default.php

Die Dateien blog*.php bestimmen das Layout für eine Kategorie bzw. Sektion, wenn für diese das Blog-Layout über den Menü-Editor eingestellt wurde. Die Dateien default*.php bestimmen das Layout für die jeweilige Standardansicht.

Ich verwende nur die Blog-Ansicht auf meiner Internetseite und werde daher nur auf die Anpassung der blog*-Dateien eingehen. Für die Standardansicht sollte das Vorgehen aber äquivalent sein.

Als erstes passen wird die Startseite an. Hierfür modifizieren wir zu aller erst die Datei blog.php im frontpage-Verzeichnis.

In Zeile 17ff und Zeile 35ff findet Ihr folgenden Code:

  1. <?php
  2.    $this->item =& $this->getItem($i, $this->params);
  3.    echo $this->loadTemplate('item');
  4. ?>

Ersetzt diese Anweisungen durch folgenden Code:

  1. <?php
  2.    $this->item =& $this->getItem($i, $this->params);
  3.    $tpl = $this->item->params->get(‘frontpage_template’, ‘item’);
  4.     echo $this->loadTemplate($tpl);
  5. ?>

Durch diese Änderung wird überprüft, ob für den jeweiligen Artikel ein Parameter ‚frontpage_template’ existiert bzw. definiert ist. Wenn dies der Fall ist, dann wird der definierte Wert, ansonsten wird ‚item’ zurückgegeben. ‚item’ ist sozusagen unser default-Template.

Wenn wird nun z.B. für einen Artikel angeben, dass das Template ‚special’ verwendet werden soll, dann tragen wir zuerst ‚special’ in das Feld „Frontpage Template“ in der Bearbeitungsoberfläche der Administration ein. Unser ‚special’-Template muss im Verzeichnis html/com_content/frontpage abgelegt sein. Wenn das Blog-Layout für die Startseite verwendet wird, dann muss das „special“-Template unter dem Dateinamen blog_special.php gespeichert werden, für die Standardansicht gilt der Dateiname default_special.php. Leerzeichen in den Template-Namen sollten vermieden werden, da dies wo möglich zu Problemen mit der Template-Engine von Joomla führen könnte. In unserem „special“-Template können wir alle Funktionen der Template-Engine und von Joomla verwenden. Ein guter Anhaltpunkt ist Item-Template von beez das als blog_item.php gespeichert ist. Dieses Template wird auch verwendet, wenn kein alternatives Template für den Artikel angegeben wurde. Diese Datei muss also zwingend vorhanden sein.

Für die Anpassung der blog.php in den Verzeichnissen „category“ und „section“ kann wie eben beschrieben vorgehen. Statt auf den Parameter „frontpage_template“ wird hier aber jeweils auf den Parameter „item_template“ abgefragt, so dass der einzufügende Code wie folgt aussieht:

  1. <?php
  2.    $this->item =& $this->getItem($i, $this->params);
  3.    $tpl = $this->item->params->get(‘item_template’, ‘item’);
  4.    echo $this->loadTemplate($tpl);
  5. ?>

Um das Template für die Artikelansicht anzupassen, ist jedoch etwas mehr notwendig. Aber keine Angst, es hält sich in Grenzen.

Die bereits existierende Datei default.php wird in default_item.php umbenannt, denn diese Datei enthält alles, was für die Artikelansicht notwendig ist. An Hand dieser Datei kann man auch relativ einfach seine eigenen Templates ausbauen.

Um Joomla dazu zu bringen, dass angegebene, alternative Template für die Artikel-Ansicht zu laden, erstellen wir eine neue Datei mit dem Namen default.php. In dieser neuen default.php bauen wir dann unsere Template-Weiche ein.

Der Inhalt der neuen default.php sieht dann wie folgt aus:

  1. <?php
  2.     defined('_JEXEC') or die('Restricted access');
  3.  
  4.     $tpl = $this->params->get('article_template', 'item');
  5.     echo $this->loadTemplate($tpl);
  6. ?>

Die Zeile defined('_JEXEC')... dient der Sicherheit und sollte unbedingt vorhanden sein, denn hierdurch wird der direkte Aufruf der Datei verhindert. Die zweite Zeile $tpl = $this->params… überprüft, wie in den anderen Dateien, ob ein alternatives Template für den Artikel definiert ist oder nicht und die Zeile weist Joomla an, dass entsprechende Template zu verwenden.

Templates, die für die Artikelansicht definiert werden, müssen immer mit „default_“ beginnen, da hier nur die Standardansicht möglich ist.

Weitere Ressourcen

Wer Fragen zur Template-Engine von Joomla, dem Beez-Template oder zur Erstellung eigener Templates hat, wird garantiert im Joomla-Wiki unter http://docs.joomla.org/Beez oder im Joomla Forum unter http://forum.joomla.org fündig. Sollte es Fragen zu den hier vorgestellten Anpassungen geben, dann gerne per Mail an mich.

Also viel Spaß mit Joomla und euren eigenen Templates.