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.
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();
Danke, mittlerweile habe ich den ganzen Code im Blog auf Namespaces umgestellt.