我正在使用TYPO3 v7.6,并试图用条件覆盖一些页面TSconfig,并将其放入FE中。
我所做的是,
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:'.$_EXTKEY.'/Configuration/PageTSconfig/pageTSConfig.txt">');`在我的扩展中的ext_localconf.php中。
在pageTSConfig.txt中
RTE.tinymce {
menu = 0
menubar = 0
plugins = code link lists
statusbar = 0
toolbar {
0 = bold italic | alignleft aligncenter | bullist numlist | undo redo | formatselect | link unlink | code
}
}
[PIDinRootline = 26]
RTE.tinymce {
plugins = code link lists textcolor colorpicker
toolbar {
0 = bold italic | forecolor | alignleft aligncenter | bullist numlist | undo redo | formatselect | link unlink | code
}
}
[end]该条件适用于BE中的页面TSconfig。然而,FE中的$GLOBALS['TSFE']->pagesTSconfig()仅获取默认RTE.tinymce,而不获取页uid=26中被覆盖的one。我错过什么了吗?
顺便说一句,我试着将条件部分移动到uid=26页面的Page TSConfig框中,我可以在我的扩展中使用$GLOBALS['TSFE']->pagesTSconfig()来获得正确的TSconfig。
发布于 2018-02-06 02:18:01
一种可能的方式,但可能不是一种好的方式。
首先,将条件TSconfig移动到另一个文件中,并使用
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:'.$_EXTKEY.'/Configuration/PageTSconfig/pageTSConfig2.txt" condition="[PIDinRootline = 26]">');`然后更新\TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser->checkIncludeLines()
/** @var AbstractConditionMatcher $conditionMatcher */
$conditionMatcher = null;
if (TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_FE) {
$conditionMatcher = GeneralUtility::makeInstance(FrontendConditionMatcher::class);
} else {
$conditionMatcher = GeneralUtility::makeInstance(BackendConditionMatcher::class);
}
// Make sure we can set the rootLine and pageId
if ($GLOBALS['TSFE']) {
$conditionMatcher->setRootLine($GLOBALS['TSFE']->rootLine);
}因此,[PIDinRootline = 26]将按预期工作,并且将相应地加载TSconfig。
使用if的原因是,在初始化$conditionMatcher时,没有设置rootLine,->match()会失败,因为[treeLevel]、[PIDupinRootline]和[PIDinRootline]都需要它工作。
https://stackoverflow.com/questions/48618681
复制相似问题