Joomla-Tipps.net

Joomla 1.5 Template Tutorial


Beitragsseiten
Joomla 1.5 Template Tutorial
Entwicklung eines CSS-basierten Joomla! 1.5 Template
Was ist ein Joomla! 1.5 Template?
Ein einfaches leeres Template
CSS für den Aufbau eines tabellenfreien Layout
Ein Joomla! 1.5 Template
Weitere Templateeigenschaften
Schlußwort
Alle Seiten

Ein einfaches leeres Template

Um die Inhalte eines Templates zu verstehen, sehen wir uns zuerst ein leeres Joomla! Template an.

Die Templatedateien

Die Dateien müssen in das /templates Verzeichnis der Joomla!-Installation kopiert werden. Wenn zum Beispiel zwei Templates installiert sind, sieht das Verzeichnis so aus:

/templates/element
/templates/voodoo

Beachten sie, daß der Verzeichnisname des Templates der gleiche wie der Name des Templates sein muss, in diesem Fall element und vodoo. Offensichtlich sind diese casesensitiv und dürfen keine Umlaute beinhalten. Innerhalb des Template-Verzeichnisses befinden sich folgende Dateien:

/element/templateDetails.xml
/element/index.php
Die Dateinamen und Speicherorte müssen genau übereinstimmen, da diese so von Joomla! aus aufgerufen werden.

templateDetails.xml

Eine XML Datei, die Joomla! darüber informiert, welche anderen Dateien benötigt werden, wenn eine Webseite mit diesem Template aufgerufen wird. Beachten Sie das groß geschriebene 'D'. Außerdem befinden sich hier Informationen über den Autoren, das Copyright und welche Dateien (insbesondere Bilder) zum Template gehören. Weiterhin ist diese Datei für die Installation im Backend notwendig.

index.php

Dies ist die wichtigste Datei. In dieser wird das Layout der Seite beschrieben und Joomla! darüber informiert, wie verschiedene Komponenten und Module platziert werden sollen. Dies wird durch die Kombination von PHP und X(HTML) erreicht.

In den meisten Templates werden weitere Dateien benutzt. In der Regel (aber von Joomla! nicht vorgeschrieben) werden diese wie folgt benannt und gespeichert:

/element/template_thumbnail.png
/element/css/template.css
/element/images/logo.png

Beispiele:

/templatename/folder/filename

Description

/element/template_thumbnail.png

Ein Browser-Screenshot des Templates (üblicherweise reduziert auf 140px Breite und 90px Höhe). Nachdem das Template installiert ist, wird dieses Bild als Preview im Backend Template Manager angezeigt.

/element/css/template.css

CSS des Templates. Ein bestimmter Speicherort ist für diese Datei nicht vorgeschrieben, er ist aber anzugeben. Der Name dieser Datei spielt eine Rolle, da er in der index.php referenziert wird. Er ist nicht zwingend vorgeschrieben, normalerweise wird aber der genannte benutzt. Wir werden später sehen, daß es Vorteile hat, wenn mehrere CSS Dateien benutzt werden.

/element/images/logo.png

Hier werden alle Bilder gespeichert, die das Template einbindet. Die meisten Designer legen aus rein organisatorischen Gründen die Bilder in einen Ordner /images ab. In diesem Beispiel wurde die Datei logo.png dort gespeichert.

templateDetails.xml

In der templateDetails.xml müsen alle Dateien enthalten sein, die im Template eingebunden werden. Weiterhin sind dort Informationen über den Autoren und ein Copyright vorhanden. Manche davon werden im Backend Template Manager angezeigt.

Hier ein Beispiel:
<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="template">
<name>TemplateTutorial15</name>
<creationDate>August 2007</creationDate>
<author>Barrie North</author>
<copyright>GPL</copyright>
<authorEmail> compassdesigns@gmail.com</authorEmail>
<authorUrl>www.compassdesigns.net</authorUrl>
<version>1.0</version>
<description>First example template for Chapter 9 of the Joomla Book<
/description>
<files>
<filename>index.php</filename>
<filename>templateDetails.xml</filename>
<filename>js/somejsfile.js</filename>
<filename>images/threecol-l.gif</filename>
<filename>images/threecol-r.gif</filename>
<filename>css/customize.css</filename>
<filename>css/layout.css</filename>
<filename>css/template_css.css</filename>
</files>
<positions>
<position>user1</position>
<position>top</position>
<position>left</position>
<position>banner</position>
<position>right</position>
<position>footer</position>
</positions>
<params>
<param name="colorVariation" type="list" default="white" label="Color
            Variation" description="Color variation to use">
<option value="blue">Blue</option>
<option value="red">Red</option>
</param>
</params>
</install>
Erklärungen:

index.php

Die index.php beinhaltet eine Kombination von X(HTML) und PHP, in der alles hinsichtlich des Layouts und der Präsentation der Seiten festgelegt ist. Zuerst sehen wir uns den kritischen Teil an, der für ein valides Template notwendig ist: Den DOCTYPE zu Beginn der index.php. An erster Stelle der index.php befindet sich folgendes:

<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Die erste PHP-Zeile stellt sicher, daß der Code aus Sicherheitsgründen nicht direkt aufgerufen werden kann.

Der DOCTYPE einer Webseite ist maßgeblich daran beteiligt, wie die Seite im Browser angezeigt wird und wie im besonderen CSS interpretiert wird. Eine Aussage von alistapart.com:

[Information on W3C's site about doctypes is] "written by geeks for "geeks. And when I say geeks, I don't mean ordinary web professionals like you and me. I mean geeks who make the rest of us look like Grandma on the first day She's Got Mail.

Wie auch immer gibt es mehrere DOCTYPEs, die Sie nutzen können. Grundsätzlich informiert der DOCTYPE den Browser darüber, wie eine Webseite interpretiert wird, "strict" oder "transitional" beispielsweise.

Seit dem Beginn des WWW bieten verschiedene Browser auch eine unterschiedliche Unterstützung von CSS. Dies heißt zum Beispiel, daß der Internet Explorer 6 nicht die Anweisung "min-width" versteht, mit ihr wird die minimale Seitenbreite vorgegeben. Um diesen Effekt zu erzeugen, sind "hacks" im CSS notwendig.

Strict bedeutet, daß HTML oder XHTML genau den Standards entsprechend interpretiert wird. Ein transitional DOCTYPE erlaubt dagegen einige kleinere Abweichungen vom Standard.

Um die Sache noch zu komplizieren, gibt es einen sogenannten Quirksmode. Wenn der DOCTYPE falsch, veraltet oder einfach nicht angegeben ist, wechselt der Browser in den Quirksmode. Dies bezeichnet den Versuch des IE, rückwärts kompatibel zu sein, er interpretiert die Seite in Gestalt des IE 4.

Unglücklicherweise wird der Quirks Mode auch unbeabsichtigt aufgerufen. Dies kann in folgenden Fällen geschehen:

Die Betrachtung des Quirksmode ist wichtig. In diesem Tutorial werden wir ausschließlich für den IE6+ entwickeln. Wir stellen also sicher, daß der Browser sich im Standard-Modus befindet. Dies minimiert das spätere Einbringen von Hacks.

Eine Webseite standardkonform aufzubauen (eine, die unten ein Logo des W3C mit "valid xhtml" hat), erfordert keine schwere Programmierung oder das Lernen kompliziert erscheinender Tags. Es heißt lediglich, daß der Code, den Sie verwenden, dem vorgegebenen DOCTYPE entsprechen muss. Nichts weiter!

Nützliche Links, welche helfen, DOCTYPE und Quirksmode zu verstehen

Mehr über die index.php

Sehen wir uns die Struktur des Kopfteils (Header) näher an. Wir wollen diesen so klein wie möglich halten, aber dennoch ausreichend für eine produktive Seite.

<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted
access' ); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="<?php echo $this->language; ?>"
lang="<?php echo $this->language; ?>" >
<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="templates/system/css/system.css"
type="text/css" />
<link rel="stylesheet" href="templates/system/css/general.css"
type="text/css" />
<link rel="stylesheet" href="templates/<?php echo $this->template ?>
/css/template.css" type="text/css" />
</head>

Den DOCTYPE haben wir bereits besprochen. Die Anweisung <?php echo $this->language; ?> lädt die Sprache aus der globalen Konfiguration.

Die nächste Zeile sorgt für die Einbindung weiterer Zeilen für den HEAD Bereich.

<jdoc:include type="head" />

Auch hier werden die Informationen ausgegeben, die in der globalen Konfiguration eingestellt worden sind.

<title>Welcome to the Frontpage</title>
<meta name="description" content="Joomla! - the dynamic portal engine
and content management system" />
<meta name="generator" content="Joomla! 1.5 - Open Source Content
Management" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="keywords" content="joomla, Joomla" />
<link href="http://www.compassdesigns.
net/content/frontpage/feed/1/rss/" rel="alternate"
type="application/rss+xml" title="RSS 2.0" />
<link href="http://www.compassdesigns.
net/content/frontpage/feed/1/atom/" rel="alternate"
type="application/atom+xml" title="Atom 1.0" />
<script type="text/javascript" src="http://localhost/Joomla-1.
5RC2/media/system/js/mootools.js"></script>
<script type="text/javascript" src="http://localhost/Joomla-1.


5RC2/media/system/js/caption.js"></script>

Viele dieser Ausgaben werden dynamisch abhängig von der aufgerufenen Seite (dem Artikel) aufgebaut. Sie beinhalen Metatags, das Favicon, RSS-Feed und einige Standard Javascript-Dateien.

Die letzte Zeile baut die Links zum Template-CSS auf.

<link rel="stylesheet" href="templates/system/css/system.css"
type="text/css" />
<link rel="stylesheet" href="templates/system/css/general.css"
type="text/css" />
<link rel="stylesheet" href="templates/<?php echo $this->template ?>
/css/template.css" type="text/css" />

Die ersten zwei Dateien system.css und general.css beinhalten Joomla! Styles. Die letzte Datei beinhaltet das CSS des Templates, hier template.css genannt. Der PHP Code <?php echo $this->template ?> gibt den Namen des aktuellen Templates zurück. Durch diese Schreibweise im Gegensatz zur Angabe der tatsächlichen Pfade macht den Code universeller. Wenn Sie ein neues Template entwickeln, können Sie den kompletten Code einfach kopieren und müssen sich nicht um die Änderung kümmern.

Es können mehrere CSS Dateien für das Template angegeben werden. Zum Beispiel browserspezifische, dieses CSS wird vom IE6 eingebunden:

<!--[if lte IE 6]>
<link href="templates/<?php echo $this->template ?>/css/ieonly.css"
rel="stylesheet" type="text/css" />
<![endif]-->

Hier ein Beispiel für die Nutzung eines Template Parameter

<link rel="stylesheet" href="templates/<?php echo $this->template ?>
/css/<?php echo $this->params->get('colorVariation'); ?>.css"
type="text/css" />


Am 20.9.2007 (changelog.php Joomla! 1.5) -damit im Release Candidate 3- wurde der neue Parameter baseurl für die Objekte 'JView' und 'JDocumentHTML' eingeführt. Mit dessen Hilfe sollen die relativen Pfade innerhalb des Template in absolute umgewandelt werden. Begründet wird diese Änderung mit einem besseren Zusammenspiel mit SEF und den W3C Standards.

Zitat aus dem Changelog: "Template designers should take notice any relative paths used in their 1.5 templates will need to be changed to absolute paths to allow the template to work with SEF on."

Das Beispiel oben muss deshalb jetzt so aussehen:
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/<
?php echo $this->params->get('colorVariation'); ?>.css" type="text/css" />

Ein leerer Template Body

Dies ist einfach. Sind Sie bereit?

Alles, was wir benötigen, sind Joomla! Statements, welche den Inhalt von Modulen und dem Mainbody ausgeben.

<body>
<?php echo $mainframe->getCfg('sitename');?><br />
<jdoc:include type="module" name="breadcrumbs" />
<jdoc:include type="modules" name="top" />
<jdoc:include type="modules" name="left" />
<jdoc:include type="component" />
<jdoc:include type="modules" name="right" />
</body>

Wenn Sie sich jetzt die Seite ansehen, wirkt sie nicht sehr beeindruckend:

Template ohne Styles 9.3 Template ohne Styles

Das Template gibt folgende Inhalte aus:

  1. Name der Seite
  2. Top Module
  3. Left Module
  4. Main Content
  5. Right Module
Das einfachste Template lädt die Joomla! Module und den Mainbody (Komponente). Das Layout und das Design ist Aufgabe des CSS, nicht von Joomla.

Das Ziel ist es, so gut wie möglich semantischen Code zu erzeugen. Das heißt, das eine Seite von jedem gelesen werden kann, von einem Browser, einem Suchmaschinenspider oder einem Screenreader. Ein semantisches Layout ist der Eckpfeiler für die Zugänglichkeit (Accessibility) einer Webseite.


Hier wird nur die Grundlage geschaffen, ein semantisches Layout zu erzeugen. Wenn in diesem z.B. zufällig erscheinende Module an zufälligen Orten aufgebaut werden, würde dies in einem Durcheinander enden. Eine wichtige überlegung für CMS-Seiten ist, daß ein Template nur so gut wie dessen eingebrachter Content ist. Dies ist der Grund, warum Designer beim Validieren der Seite Fehler feststellen.

Sie werden bemerkt haben, daß wir zum ersten Mal Joomla! spezifische Anweisungen benutzt haben, um die Ausgabe zu erzeugen:

<?php echo $mainframe->getCfg('sitename');?><br />
<jdoc:include type="module" name="breadcrumbs" />
<jdoc:include type="modules" name="top" />
<jdoc:include type="modules" name="left" />
<jdoc:include type="component" />
<jdoc:include type="modules" name="right" />

Die PHP echo-Anweisung gibt eine Zeichenkette aus der configuration.php aus. Hier ist es der Seitenname. Genauso einfach könnten wir folgendes ausgeben:

The name of this site is <?php echo $mainframe->getCfg('sitename');?><br />
The administrator email is <?php echo $mainframe->getCfg('mailfrom');?><br />
This template is in the <?php echo $this->template?> directory<br />
The URL is <?php echo JURI::base();;?>

Die jdoc-Anweisung fügt diversen XHTML Code ein, sowohl von Modulen als auch von Komponenten.

Die folgende Zeile fügt die Ausgabe einer Komponente ein. Welche Komponente es ist, wird vom Menülink festgelegt.

<jdoc:include type="component" />

Interessanterweise kann der Code von mehreren Instanzen einer Komponente ausgegeben werden. Keine Ahnung, warum Sie dieses wollen würden, es sollte aber gesagt sein. Möglicherweise ist es ein Bug.

Diese Zeile fügt die Ausgabe einer Modulposition ein.

<jdoc:include type="modules" name="right" />

Die komplette Syntax:

<jdoc:include type="modules" name="LOCATION" style="OPTION" />

Wir werden uns die verschiedenen Optionen noch später genauer ansehen.

CSSTemplateTutorialStep1

Zu diesem Zeitpunkt haben wir ein sehr einfaches Template entwickelt. Ich habe ein installationsfähiges Template geschrieben, das von Compass library geladen werden kann: CSSTemplateTutorialStep1.zip.

Dieses Template besteht aus zwei Dateien, die index.php und die templateDetails.xml. Ich habe alle Referenzen zu anderen Dateien entfernt, um eine Ausgabe ohne CSS zu erzeugen. Dies ist ein nützliches Template für Diagnosezwecke. Sie können es installieren und Fehler untersuchen, die bei einer Komponente oder einem Modul auftreten.