防止 TypoScript 级联?

Prevent TypoScript from cascading?

我几乎在每个项目中都有这个:默认情况下,TypoScript 级联到页面树中的子节点。如果您想阻止它应用于子节点,一种解决方案是创建一个额外的 TS 模板来撤消它并将其包含为 "template on next level".

例如你想将一些 TS 应用到特定的父页面,但不是它的子页面:

temp.somemenu.wrap = **|**

除了 "template on next level" 方法外,solutions/hacks 还包括:

如果你知道你从哪个级别开始:

[treeLevel = 2]
  temp.somemenu.wrap = **|**
[global]

如果您有 pid 并想将其连接到常量中:

[page|uid = {$targetPagePid}]
  temp.somemenu.wrap = **|**
[global]

编辑: 适应常量——这是一个非常可靠的解决方案!

是否有一些开关可以使 TS 设置不级联?或者定义它可以级联的级别数?

类似

<INCLUDE_TYPOSCRIPT: source="path/to/my.ts" treeLevelsDown="0">

[global treeLevelsDown = 0]
  temp.somemenu.wrap = **|**
[global]

这意味着 TS 具有自我意识,知道它被设置在哪个树级别。不确定这是否可能。

有道理吗?

还是我遗漏了一些现有的解决方案?

不,除了您在问题中已经提到的那些以外,这不起作用。这样做的原因是,TYPO3 从一个页面开始,向上查找页面树,直到找到 TypoScript 模板。 (它在途中收集所有扩展模板并将它们应用到第一个找到的根模板之上)。

因此它永远不会下降,只会上升。如果它在一定级别后停止级联,应该使用什么作为这些网站的 TypoScript 模板?它仍然需要一个配置来呈现页面。

这个问题是理论性的,@pgampe 回答了它。

关于我的用例,这是@bernd-wilke-πφ 的解决方案,效果很好

// just apply to page references
[page|uid = {$pidReferencesList}]

// add some additional js (a list filter) 
page.includeJSFooter {
  refs = {$templatePath}/Resources/Public/additional_js/references.js
}
// add some markup
lib.thecontent.wrap =   <div id="items-list-wrapper">|</div>

[global]