调用字符串上的成员函数filterAccessiblePageIds()

问题描述 投票:0回答:1

我想在我的函数中获取页面内容。我正在开发一个用于发送新闻通讯的扩展。我的目标是在邮件正文中添加页面内容。我创建了一项新的调度程序任务,并在该任务中添加了一个字段

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>

你能帮我一下吗?我该如何解决这个错误?

typo3 typo3-11.x
1个回答
0
投票

主要问题是,您不在前端上下文中,因此 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
  }
}

请注意,我使用了您的打字错误新闻。通常我会称之为时事通讯。但前提是其他人想使用这个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.