Extbase: Standalone View

Siehe auch EXT:rr_restaurants oder EXT:loewen_css (Implementierung als Utility)

Rendern eines View ohne zugehörige Action, z.B. für ein E-Mail-Template:

$configuration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
$view = $this->objectManager->get(\TYPO3\CMS\Fluid\View\StandaloneView::class);
$view->getRequest()->setControllerExtensionName($this->extensionName);
$view->setFormat('txt');
$view->setLayoutRootPaths($configuration['view']['layoutRootPaths']);
$view->setPartialRootPaths($configuration['view']['partialRootPaths']);
$view->setTemplateRootPaths($configuration['view']['templateRootPaths']);
$view->setTemplate('Mail/MyTemplate');
$view->assign('myParam', $myParam);
$result = $view->render();

Die Funktion setControllerExtensionName() ist dafür zuständig, dass die Sprachen aus der locallang.xml ausgelesen werden können.

Funktioniert auch im TYPO3 BE, dann muss man aber module.tx_myext.view.templateRootPaths (und die anderen Pfade) über ext_typoscript_setup.txt (damit es auf der obersten Ebene verfügbar ist) setzen.

Alternative, bei nur einem Template, das ggf. in fileadmin liegt:

$templateRootPath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($configuration['view']['templateRootPath']);
$view->setTemplatePathAndFilename($templateRootPath . 'Mail/MyTemplate.txt');

Dieser Code ersetzt die Zeilen 5 bis 8 im ersten Snippet.

 

Autor:
Geändert: Dienstag, 11. Oktober 2016 11:49 Uhr
Erstellt: Sonntag, 5. Mai 2013 22:45 Uhr
Tags: , , , ,
Themengebiet: Web Entwicklung, TYPO3, TYPO3 Extension-Programmierung

Trackback: Trackback-URL LoadingZu Favoriten hinzufügen

2 Kommentare

  1. 1

    hier das ganze mit namespaces:

    $standaloneView = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
    $extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
    $templateRootPath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($extbaseFrameworkConfiguration['view']['templateRootPath']);
    $templatePathAndFilename = $templateRootPath . 'StandAloneViews/StandAloneView.html';
    $extensionName = $this->request->getControllerExtensionName();
    $standaloneView->getRequest()->setControllerExtensionName($extensionName);
    $standaloneView->setTemplatePathAndFilename($templatePathAndFilename);
    $standaloneView->assignMultiple(array(
    'foo' => 'bar',
    'foo2' => 'bar2'
    ));
    $result = $standaloneView->render();

  2. 2

    Danke, mittlerweile habe ich den ganzen Code im Blog auf Namespaces umgestellt.

Kommentar abgeben