TYPO3 v10:如何在 Backend/Scheduler 任务中访问 TSFE?
TYPO3 v10: How to access TSFE in Backend/Scheduler Task?
目前情况:
我正在尝试从后端(或者更确切地说是调度程序任务)访问前端的 TypoScript 配置。之前使用 Typo3 v8 和 v9,我初始化了整个 $GLOBALS["TSFE"] 对象,但是这已经是上一次破解(使用大部分已弃用的调用),现在它已在 v10 版本中全部删除。
我的目标:
从调度程序作业中访问特定页面前端的 TypoScript 配置(网站的根页面就可以)。
整个项目背景:
我有一个定期调度程序作业,可以向各种用户 (fe_users) 发送电子邮件。该电子邮件包含某些页面的链接(在拼写中配置的 UID)以及文件附件等(由其他扩展生成,也通过拼写完全配置)。目前,我基本上是从后端内部初始化整个前端,但正如我之前所说,它效率低下,超级 hacky,我怀疑这是否是解决此问题的预期方法。
这不会变得更好,也不打算这样做。我将用作配置:
- 普通 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);
}
在后端获取 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
中获得灵感
目前情况:
我正在尝试从后端(或者更确切地说是调度程序任务)访问前端的 TypoScript 配置。之前使用 Typo3 v8 和 v9,我初始化了整个 $GLOBALS["TSFE"] 对象,但是这已经是上一次破解(使用大部分已弃用的调用),现在它已在 v10 版本中全部删除。
我的目标:
从调度程序作业中访问特定页面前端的 TypoScript 配置(网站的根页面就可以)。
整个项目背景:
我有一个定期调度程序作业,可以向各种用户 (fe_users) 发送电子邮件。该电子邮件包含某些页面的链接(在拼写中配置的 UID)以及文件附件等(由其他扩展生成,也通过拼写完全配置)。目前,我基本上是从后端内部初始化整个前端,但正如我之前所说,它效率低下,超级 hacky,我怀疑这是否是解决此问题的预期方法。
这不会变得更好,也不打算这样做。我将用作配置:
- 普通 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);
}
在后端获取 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