我正在使用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中的Page TSconfig。但是,FE中的$GLOBALS['TSFE']->pagesTSconfig()
仅获取默认RTE.tinymce
,而不是页面uid=26
中的覆盖的Page TSConfig
。我错过了什么吗?
BTW,我尝试将条件部分移动到页面uid=26
中的$GLOBALS['TSFE']->pagesTSconfig()
框中,我可以在扩展程序中使用{{1}}更正TSconfig。
答案 0 :(得分:0)
可能的方式,但可能不是一个好方法。
首先,将条件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]
,{{1} }和[PIDupinRootline]
要求它起作用。