Eigenes Template im Fluid Pagination Widget

Nach langer Suche über Google bin ich schon fast verrückt geworden – es gibt viele Tipps, Fragen zu dem Thema, aber keine Antwort hat zu irgendwas geführt. Die beste Anleitung fand ich hier: Fluid-Pagebrowser. Nachdem ich sie befolgt habe, hat es immer noch nicht funktioniert, stattdessen bekam ich eine Fehlermeldung: „Sorry, requested view was not found“, genau wie im forge.typo3 beschrieben. Nach ein bisschen ausprobieren, habe ich nun die Lösung gefunden.

1) Zunächst muss der PaginationController erweitert werden. Dazu im Ordner Classes/ViewHelpers/Widgets/Controller einen Datei PaginateController.php erstellen. Darin steht folgendes:

<?php
class Tx_YourExt_ViewHelpers_Widget_Controller_PaginateController extends Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController {
 
	/**
	 * @param Tx_Extbase_MVC_View_ViewInterface $view
	 * @return void
	 * @todo implement logic for overriding widget template paths (tx_extension.view.widget.<WidgetViewHelperClassName>.templateRootPath...)
	 */
	protected function setViewConfiguration(Tx_Extbase_MVC_View_ViewInterface $view) {
		$extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
		$widgetViewHelperClassName = $this->request->getWidgetContext()->getWidgetViewHelperClassName();
		if (isset($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath'])
			&& strlen($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath']) > 0
			&& method_exists($view, 'setTemplateRootPath')) {
			$view->setTemplateRootPath(t3lib_div::getFileAbsFileName($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath']));
		}
	}
 
}
?>

Der Klassenname enthält den Namen der Extension, also muss Tx_YourExt entsprechend angepasst werden. Der Inhalt dieser Klasse ist das Diff aus dem Ticket im Forge, in dem die Template-Problematik im Paginate Widget besprochen wird.

2) Dann muss ein Template für das Paginate Widget erstellt werden. Dazu am besten die entsprechende Datei aus dem Fluid-Ordner kopieren, individualisieren und anpassen. Template für Paginate Widget in Fluid ist in typo3/sysext/fluid/Resources/Private/Templates/ViewHelpers/Widget/Paginate. Das Template wird kopiert nach Resources/Private/Backend/Templates/ViewHelpers/Widget/Paginate im Extension-Ordner.

3) Dann muss in der Konfiguration einmal die Klasse des Pagination Widgets mittels Dependancy Injection gesetzt werden und der Pfad zum Template muss angepasst werden. Daher folgendes in der Konfiguration der Extension vornehmen (in meinem Fall wars ein Modul):

module.tx_myext {
	view {
		widget.Tx_MyExt_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = {$module.tx_myext.view.templateRootPath}
	}
}
config.tx_extbase.view.widget.Tx_Fluid_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = {$module.tx_myext.view.templateRootPath}

Überall da, wo ich myext eingesetzt habe, kommt der Name der Extension hin.

Nach diesen 3 Anpassungen hat es bei mir funktioniert. Sollte jemand, der es besser weiß (Mitglieder des Fluid-Teams) diesen Beitrag lesen, würde ich mich über Korrekturvorschläge wahnsinnig freuen.

1 Kommentar

  1. Stefan

    Vielen Dank für die Anleitung, hat mir gerade sehr geholfen!