【问题标题】:TYPO3 v10: How to access TSFE in Backend/Scheduler Task?TYPO3 v10:如何在后端/调度器任务中访问 TSFE?
【发布时间】:2021-09-01 09:52:39
【问题描述】:

目前的情况:
我正在尝试从后端(或者更确切地说是调度程序任务)访问前端的 TypoScript 配置。之前在 Typo3 v8 和 v9 中,我初始化了整个 $GLOBALS["TSFE"] 对象,但是这在上次已经被破解了(使用大部分已弃用的调用),现在它已在 v10 版本中全部删除。

我的目标:
从调度程序作业中访问特定页面(站点的根页面即可)前端的 TypoScript 配置。

整个项目的背景:
我有一个定期调度作业,可以向各种用户(fe_users)发送电子邮件。该电子邮件包含指向某些页面的链接(在打字稿中配置的 UID)以及文件附件等(由其他扩展程序生成,也通过打字稿完全配置)。目前,我基本上是从后端初始化整个前端,但正如我之前所说,它效率低下,超级hacky,我怀疑这是解决这个问题的预期方法。

【问题讨论】:

  • PageUID 的配置可能通过扩展配置而不是打字稿来实现。扩展配置可以通过 ExtensionConfiguration (docs.typo3.org/m/typo3/reference-coreapi/master/en-us/…) 轻松访问
  • 不幸的是,这不会削减它,因为我需要一个每个网站的配置,而不是每次有更改时都编辑插件......

标签: typo3 typoscript


【解决方案1】:

这不会变得更好,也不打算这样做。我会用作配置:

  • 普通 PHP,例如在$GLOBALS['TYPO3_CONF_VARS]`
  • YAML 站点配置(如果取决于各种站点)

您可以使用例如建立链接类似的东西

protected function generateUrl(int $pageId, int $recordId)
    {
        $additionalParams = 'tx_xxxx[action]=show&tx_ixxxx[controller]=Job&tx_xxxx[job]=' . $recordId;
        return BackendUtility::getPreviewUrl($pageId, '', null, '', '', $additionalParams);
    }

【讨论】:

  • 不幸的是,不仅仅是指向 URL 的链接,而是通过 TypoScript 设置了每封邮件发送的内容(以及可以找到/生成文件的位置)的整个配置。所以最好的选择是在调度程序作业配置中复制所有内容,而不是访问 TSFE?
【解决方案2】:

在后端获取 TypoScript 设置很难看,但可能。

您需要一个页面 ID 和一个可以传递给 \TYPO3\CMS\Core\TypoScript\TemplateService::runThroughTemplates() 的根行。

类似的东西:

$template = GeneralUtility::makeInstance(TemplateService::class);
$template->tt_track = false;
$rootline = GeneralUtility::makeInstance(
  RootlineUtility::class, $pageId
)->get();
$template->runThroughTemplates($rootline, 0);
$template->generateConfig();
$typoScriptSetup = $template->setup;

你可以从\TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager::getTypoScriptSetup\TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController获得灵感

【讨论】:

  • 啊,就是这样!非常感谢,这将非常有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2021-01-11
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多