Joomla! Programmierung/Programmierung/Komponenten/Front/tmpl
Inhaltsverzeichnis |
[Bearbeiten] Ziel
Die Templatedatei eines Views ist für die Ausgabe zuständig. Hier werden einfach alle vom View generierten Daten mittels HTML strukturiert und danach ausgegeben.
[Bearbeiten] Grundlegendes
Die Templatedateien eines Views befinden sich im Ordner
tmpl, der sich wiederum im Ordner des jeweiligen Views befindet. Standardmäßig erwartet Joomla! eine
default.php. Durch den Parameter layout kann dies jedoch in der Url angepasst werden.
index.php?option=com_komponentenname&view=viewname&layout=layoutname
In diesem Fall wird anstatt einer
default.php die Datei
layoutname.php erwartet. Wenn kein layout übergeben wird, so wird die default.php geladen. Somit sind folgende zwei Aufrufe identisch:
index.php?option=com_komponentenname&view=viewname&layout=default
index.php?option=com_komponentenname&view=viewname
Die Templatedatei sollte möglichst nur zur Ausgabe von Daten genutzt werden, da dies theoretisch die Sicherheit erhöht. Die Templatedatei ist die einzige Datei im View, die per Override vom Template überschrieben werden kann.
[Bearbeiten] default.php - die Templatedatei
Für die Darstellung der Gästebuchtexte wird die Standarddatei
default.php genutzt. Erstellen Sie diese Datei im Ordner
tmpl in Ihrem jnafu View. Damit erhalten Sie folgende Ordnerstruktur:
[Bearbeiten] Erste Hackversuche unterbinden
Wie in jeder anderen Joomla! Datei sollten Sie als erstes einen Schutz einbauen, der Direktzugriffe auf die Datei unterbindet:
// Verhindern, dass die Datei direkt aufgerufen wird defined('_JEXEC') or die('Restricted access');
[Bearbeiten] Einträge ausgeben
Als nächstes werden einfach mittels einer foreach Schleife alle Einträge untereinander ausgegeben. Die Email wird mittels JHTMLEmail::cloak für Bots verschlüsselt. Die Homepage wird mittels JHTML::link zu einem Link umgewandelt und das Datum wird mit JHTML::date entsprechend der installierten Sprache formatiert.
<?php // Testen, ob Einträge vorhanden sind if(isset($this->entries) && count($this->entries)): // Einträge durchgehen foreach ($this->entries as $entry) : ?> <div id="jnafuentry<?php echo $entry->id; ?>" class="jnafuentry"> <div class="jnafuinfo"> <span class="jnafuauthor"> <?php echo $entry->author; ?> </span> <span class="jnafuemail"> <?php echo $entry->show_email? JHTML::_('email.clock', $entry->email) : ''; ?> </span> <span class="jnafuhomepage"> <?php echo strlen($entry->homepage)? JHTML::_('link', $entry->homepage, JText::_('Homepage')) : ''; ?> </span> <span class="jnafudate"> <?php echo JHTML::_('date', $entry->date); ?> </span> </div> <div class="jnafuentry"> <?php echo $entry->text; ?> </div> </div> <?php endforeach; ?>
[Bearbeiten] Der komplette Quellcode
<?php /** * @author Joomla!-Nafu * @authorurl http://www.joomla-nafu.de * @version 0.1 * @license GNU General Public License, http://www.gnu.org/licenses/gpl-2.0.html * * JNafu! - Joomla! 1.5.x Gästebuch Demo Komponente * Copyright (C) 2009 - Joomla!-Nafu * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see <http://www.gnu.org/licenses/>. **/ // Verhindern, dass die Datei direkt aufgerufen wird defined('_JEXEC') or die('Restricted access'); // Testen, ob Einträge vorhanden sind if(isset($this->entries) && count($this->entries)): // Einträge durchgehen foreach ($this->entries as $entry) : ?> <div id="jnafuentry<?php echo $entry->id; ?>" class="jnafuentry"> <div class="jnafuinfo"> <span class="jnafuauthor"> <?php echo $entry->author; /* Autor ausgeben */ ?> </span> <span class="jnafuemail"> <?php echo $entry->show_email? JHTML::_('email.clock', $entry->email) : ''; ?> </span> <span class="jnafuhomepage"> <?php echo strlen($entry->homepage)? JHTML::_('link', $entry->homepage, JText::_('Homepage')) : ''; ?> </span> <span class="jnafudate"> <?php echo JHTML::_('date', $entry->date); ?> </span> </div> <div class="jnafuentry"> <?php echo $entry->text; ?> </div> </div> <?php endforeach; ?>