Extbase: Standalone View

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.

2 Kommentare zu “Extbase: Standalone View”

  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();

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.