- typoblog - http://www.typoblog.de -

Teil 6: Implementierung Bibliothekscontroller & Backendmodul für die Verwaltung

Teil 6:

Implementierung Bibliothekscontroller &

Backendmodul für die Verwaltung

 

Der Bibliothekscontroller

Nun wenden wir uns dem zentralen Controller für die Verwaltung der Bibliothek zu. Ein Controller gehört per Convention in das Verzeichnis Classes/Controller. Beginnen wir mit dieser Klasse, zunächst nur mit einer Minimalausstattung:

<?php
namespace Typovision\Biblio\Controller;
/** copyright notice **/
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

/**
 * The main Controller, managing all the tasks for biblio management
 */
class BiblioController extends ActionController{

	/**
	 * initial action, called on a clean request without specified target
	 */
	public function indexAction() {
	}
}

 

Ein Backendmodul für die Verwaltung

Um nun endlich auch einmal etwas zu sehen, wenden wir uns jetzt der Einbindung der Extension ins Backend zu. Das geschieht über ein Modul. In die Datei ext_tables.php wird folgender Funktionsaufruf platziert:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
	'Typovision.' . $_EXTKEY,   // vendor + extkey, seperated by a dot
	'web',                      // Backend Module group to place the module in
	'management',               // module name
	'',                         // position in the group
	array(                      // Allowed controller -> action combinations
		'Biblio' => 'index',
	),
	array(                      // Additional configuration
		'access' => 'user,group',
		'icon' => 'EXT:biblio/ext_icon.png',
		'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xlf',
	)
);

 

Nun müssen noch die Labels in die Datei locallang_mod.xlf platziert werden. Dazu habe ich meine locallang_db.xlf einfach kopiert, denn es ist anzunehmen, dass ich die Labels wieder brauchen werde. Außerdem, nach einmal abschauen im beuser module (Backend User-Modul), kamen diese Zeilen dazu:

<trans-unit id="mlang_labels_tablabel" xml:space="preserve">
	<source>Biblio Management</source>
</trans-unit>
<trans-unit id="mlang_labels_tabdescr" xml:space="preserve">
	<source>Dashboard for biblio related tasks</source>
</trans-unit>
<trans-unit id="mlang_tabs_tab" xml:space="preserve">
	<source>Biblio Management</source>
</trans-unit>

 

Ich bin mir nicht sicher, wann das Backend welches der Labels benutzt. Wenn ich einmal Langeweile haben sollte, könnte man das in Erfahrung bringen. Aber so lange nun im Web Module mein Modul angezeigt wird, ist es mir relativ egal.

Damit ist die Arbeit getan, im Backend einmal den system cache löschen und das Backend neu laden, dann erscheint im Web-Modul das Biblio-Management-Modul.

Leider enthüllt ein Klick auf dieses Modul, dass doch nicht alles magisch geschieht, denn das Backend zeigt uns nun eine Meldung, dass nichts angezeigt werden kann, weil kein Template gefunden wurde:

Sorry, the requested view was not found.
The technical reason is: No template was found. View could not be resolved for action "index" in class "Typovision\Biblio\Controller\BiblioController".

 

Diese Meldung zeigt, dass bei einem nicht spezifizierten Aufruf (also ohne übergebene Parameter), der erste Controller mit seiner ersten Action aufgerufen wird, wie wir das in ext_tables.php konfiguriert haben. Nach Namenskonvention wird das Template gesucht in <extkey>/Resources/Private/Templates/<Controllername>/<Actionname>.html.

Das wäre didaktisch jetzt wahrscheinlich der richtige Augenblick für eine weitere theoretische Lektion, nämlich ‘wie funktioniert Fluid’. Rein pragmatisch interessiert Dich das wahrscheinlich aber erst, wenn man denn endlich etwas sehen kann, richtig? Also dann, vertrau mir erstmal, die Theorie kommt dann gleich im Anschluss.

Wenn Du dem Rat in Teil 2 der Blogreihe [1] gefolgt bist, inklusive des Updates aus dem Kommentar, kannst Du nun einfach mit Hilfe der File Templates ein neues Fluid Template erzeugen, das schon beinah alles enthält, was Du brauchst. Wenn nicht, musst Du das jetzt händisch machen:

Lege eine Datei Index.html in Resources/Private/Templates/Biblio an und gib ihr folgenden Inhalt:

<div xmlns="http://www.w3.org/1999/xhtml" lang="en"
	 xmlns:f="http://xsd.helmut-hummel.de/ns/TYPO3/CMS/Fluid/ViewHelpers">
	<f:layout name="Default"/>
	<title>Templates: Index</title>
	<f:section name="main">
		Hallo, ich bin das Backend-Modul!
	</f:section>
</div>

 

Die Fehlermeldung, die man jetzt erhält, wenn man das Modul aufruft, lautet

Oops, an error occurred!
The template files ".../typo3conf/ext/biblio/Resources/Private/Layouts/Default.html", ".../typo3conf/ext/biblio/Resources/Private/Layouts/Default" could not be loaded.

 

Damit das nun funktioniert, brauchen wir noch eine Layout-Vorlage, denn das Template selber verlässt sich auf die Anwesenheit von Default.html (siehe Zeile 3), und das müssen wir jetzt auch noch anlegen. Warum? Gleich, nur noch ein bißchen Geduld.

Erstelle eine Datei Default.html in Resources/Private/Layouts und gib ihr folgenden Inhalt:

<div class="biblio">
	<f:render section="main" />
</div>

 

Wenn Du jetzt das Modul noch einmal aufrufst, begrüßt es Dich mit

Hallo, ich bin das Backend-Modul!

 

Nett, oder? Das wäre damit die erste große Etappe gewesen. Wir haben ein Domainmodel aus einer Anforderung erstellt, die Model Dateien sowie die Informationen für Darstellung und Speicherung definiert und den Grundstein für Benutzerinteraktion gelegt. Wie versprochen, ist hier auch der Link für den Download von dieser ersten Version der Extension (v0.1.1):  biblio_0.1.1 [2]

Hier geht es zum nächsten Beitrag: Fluid – die Templating Engine. [3]

Beitrag verpasst?
Extension-Entwicklung mit TYPO3 Extbase & Fluid

Teil 1: Entstehung der Blogreihe, Idee & Datenmodellierung
Teil 2: Das Grundgerüst
Teil 3: Implementierung
Teil 4: Implementierung Kunden Model
Teil 5: Implementierung Model Bibliothek [4]