【问题标题】:Prevent TypoScript from cascading?防止 TypoScript 级联?
【发布时间】:2017-03-24 12:52:01
【问题描述】:

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

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

temp.somemenu.wrap = **|**

除了“下一级模板”方法外,解决方案/技巧包括:

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

[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 有点自我意识,知道它设置在哪个树级别。不确定这是否可能。

有意义吗?

或者我错过了一些现有的解决方案?

【问题讨论】:

  • 你能描述一下你在说什么吗? temp.somemenu 是什么菜单类型,你想在那里包装什么?
  • 第一个:你应该使用[page|uid = 80],而不是[globalVar = TSFE:id=80]。第二:您可以在您的(设置)条件中使用 TS-constants,使其更加灵活:[page|uid = {$pid.special}]。并且不要忘记:您还可以在条件[page|uid = {$pid.special},{$pid.main}] 中使用多个值。但正如迪米特里所问:你想达到什么目标?也许还有其他解决方案。
  • 这太完美了!无论如何,我一直在使用常量中的 pid。我不知道你可以在条件下使用它们。关于“做什么”:这个问题也是理论上的,你的解决方案对我来说绰绰有余。不过,我会发布我的用例,看看答案

标签: typo3 typoscript


【解决方案1】:

这个问题是理论上的,@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]

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 2021-08-02
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      相关资源
      最近更新 更多