我想在我的函数中获取页面内容。我正在开发一个用于发送新闻通讯的扩展。我的目标是在邮件正文中添加页面内容。我创建了一项新的调度程序任务,并在该任务中添加了一个字段
pageId
。现在我想在我的自定义调度程序任务中获取此页面内容。所以,我写了下面的代码。
SendNewslatters.php:
$this->initTask();
$selectedGroup = (int)$this->group;
$pageId = (int)$this->pageId;
$renderer = $this->rendererUtility->getFluidRendererForTemplate(
'typo3conf/ext/newslatters/Resources/Private/Templates/Subscribers/Mail/NewslaterMail.html',
'html'
);
$renderer->assign('pageId', $pageId);
$message = $renderer->render();
NewslaterMail.html:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '0', pageUid: pageId}" />
</html>
你能帮我一下吗?我该如何解决这个错误?
主要问题是,您不在前端上下文中,因此 TSFE 数组丢失。
有多种方法可以实例化 TSFE 数组(请注意,TYPO3 文档中不建议这样做)。但一个好方法是使用 nnHelper 扩展:
https://extensions.typo3.org/extension/nnhelpers
您可以安装完整的扩展或将
Tsfe
类复制到您的项目中。
在此解决方案中,我安装了扩展。
您的任务应如下所示:
$pageId = (int)$this->pageId;
$tsfe = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Nng\Nnhelpers\Utilities\Tsfe::class);
$tsfe->get($pageId);
$view = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Fluid\View\StandaloneView::class);
$view->setTemplateRootPaths(array(\TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName('EXT:newslatters/Resources/Private/Templates/Subscribers/Mail')));
$view->setTemplate('NewslaterMail');
$view->assign('pageId', $pageId);
$emailBody = $view->render();
在模板中,您应该直接传递 pageUid 而不是数组,然后您可以通过 Typoscript 中的当前变量访问它。您的模板应如下所示:
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:cObject typoscriptObjectPath="lib.newsletterContent" data="{pageId}" />
</html>
要渲染内容,您可以使用自己的内容库,如下所示:
lib.newsletterContent = CONTENT
lib.newsletterContent {
table = tt_content
select {
pidInList.current = 1
}
}
请注意,我使用了您的打字错误新闻。通常我会称之为时事通讯。但前提是其他人想使用这个解决方案。