Joomla! Programmierung/Programmierung/Komponenten/Front/View
Inhaltsverzeichnis |
[Bearbeiten] Ziel
In diesem Schritt wird die Ausgabe der Komponente vorbereitet. Dabei wird ein sogenannter View angelegt. Dieser fordert vom Model alle benötigten Dateien an, die dann Verarbeitet werden. Schlussendlich werden die Daten an die Templatedatei übergeben und in unserem Fall unser Gästebuch angezeigt.
[Bearbeiten] Grundlegendes
Die Views einer Komponente befinden sich immer im Ordner
views. In diesem wird dann ein Unterordner mit dem Namen des Views erstellt. In diesem Ordner wird dann nochmals ein Unterordner
tmpl erstellt, der die Templatedateien des Views enthält. Der View selbst kann dann über einen Parameter in der Url aufgerufen werden.
index.php?option=com_komponentenname&view=viewname
Wenn der View den selben Namen wie die Komponente besitzt, dann wird dieser View als Standardview aufgerufen, wenn kein anderer über die Urlparameter angefordert wird. Somit sind folgende zwei Aufrufe identisch:
index.php?option=com_komponentenname&view=komponentenname
index.php?option=com_komponentenname
[Bearbeiten] view.xxx.php
Joomla! selbst liefert vier verschiedene Viewarten mit. Während die view.html.php der Standardview ist und automatisch aufgerufen wird, müssen die anderen Dateien mit dem Parameter format aufgerufen werden.
// view.html.php index.php?option=com_komponentenname&view=viewname // view.raw.php index.php?option=com_komponentenname&view=viewname&format=raw // view.feed.php index.php?option=com_komponentenname&view=viewname&format=feed // view.pdf.php index.php?option=com_komponentenname&view=viewname&format=pdf
- view.html.php
- Dieses Format ist für eine "normale" HTML Darstellung zuständig. Es ist zudem das Standardformat und wird von Joomla! angenommen, wenn keine zusätzlichen Parameter angegeben werden. In den meisten Fällen ist dieses Format für die meisten Views ausreichend.
- view.raw.php
- Bei diesem Format werden die Inhalte in Rohform ausgegeben. Das heißt, Joomla! selbst fügt keinerlei Output (sei es Template oder Module) zur Ausgabe hinzu. Dieses Format ist nützlich, wenn z.B. bestimmte Views in einer LightboxToDo Verlinken angezeigt werden sollen.
- view.feed.php
- Dieses Format kann genutzt werden um sehr einfach einen RSS Feed zu erstellen.
- view.pdf.php
- Mit diesem Format kann "on the fly" eine PDF Datei erstellt werden.
[Bearbeiten] view.html.php - Der View
In dieser Komponente wird im Frontend nur ein View genutzen; und zwar genau den Standardview jnafu. Dieser besitzt als "Viewdatei" eine view.html.php. Erstellen Sie somit im Ordner
views einen Unterordner
jnafu mit einem weiteren Unterordner
tmpl. Erstellen Sie zusätzlich im Ordner
jnafu die Datei
view.html.php. 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] Einbinden der Joomla! View Klasse
Als nächstes muss die Joomla! View Klasse JViewToDo JView - Verlinken eingebunden werden. Joomla! bietet in diesem Fall die Funktion jimportToDo JInclude - Verlinken an.
// Einbinden des Joomla! Views jimport('joomla.application.component.view');
[Bearbeiten] Die JNafuViewJNafu Klasse
Die View-Klassen einer Komponente haben immer folgende Struktur: [Komponentenname]View[Viewnamen] somit lautet die Klasse für diesen View JNafuViewJNafu (Beachten Sie, dass die Groß- und Kleinschreibung bei Klassennamen nicht relevant sind). Diese Klasse soll nun alle Methoden von der Joomla! Klasse JView erben (extends).
// Die JNafu View Klasse class JNafuViewJNafu extends JView { }
[Bearbeiten] Die display Methode
In der Methode "display" werden die Daten aus dem Model geholt und aufbereitet. Zusätzlich können hier auch verschiedene Parameter gesetzt und zugehörige CSS-/Javascriptdateien eingebunden werden. Am Ende werden benötigte Daten an die Templatedatei übergeben. In dieser Methode selbst sollte keine Ausgabe stattfinden, stattdessen sollten dies den Templatedatei vorbehalten sein.
In dieser display Methode werden erst mal nur alle Gästebucheinträge aus der Datenbank geladen und an die Templatedatei übergeben. Als letzter Schritt wird noch die PaginationToDo Verlinken auf JPagination an die Templatedatei übergeben.
// Generelle display Methode vom JNafu View public function display($tpl=null) { // Lade alle Gästebucheinträge aus dem Model $entries = $this->get('JNafuEntries'); // Lade Pagination für die Gästebucheinträge $pagination = $this->get('JNafuPagination'); // Übergebe benötigte Variablen an die Templatedatei $this->assignRef('entries', $entries); $this->assignRef('pagination', $pagination); // Aufrufen der display Methode von JView, damit die Templatedatei eingebunden wird parent::display($tpl); }
[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'); // Die JNafu View Klasse class JNafuViewJNafu extends JView { // Generelle display Methode vom JNafu View public function display($tpl=null) { // Lade alle Gästebucheinträge aus dem Model $entries = $this->get('JNafuEntries'); // Lade Pagination für die Gästebucheinträge $pagination = $this->get('JNafuPagination'); // Übergebe benötigte Variablen an die Templatedatei $this->assignRef('entries', $entries); $this->assignRef('pagination', $pagination); // Aufrufen der display Methode von JView, damit die Templatedatei eingebunden wird parent::display($tpl); } }