如何基于TYPO3页面布局包含JS?

How to include JS based on TYPO3 page layout?

我正在使用page.includeJSFooter,需要在页面布局设置为某个值时添加文件。

我试过像这样使用 if:

page.includeJSFooter {
  file1 = myscript.js
  file1.if.isFalse.field = layout
  file1.if.isFalse.value = 103
  file1.if.isFalse.negate = 1
}

我尝试了一些变体,但无法正常工作?

如果您使用后端布局,那么下面的代码可能会对您有所帮助

[globalVar = TSFE:page|backend_layout =pagets__seitenleiste]
page.includeJSFooter {
 file1 = myscript.js
}
[end]

如果您使用前端布局,那么下面的代码将帮助您

[globalVar = TSFE:page|layout =1]
page.includeJSFooter {
file1 = myscript.js
}
[end]

如果这对您不起作用,请告诉我,我会尝试建议另一种方法!!

你的情况有些问题:

file1.if.isFalse.field = layout

您测试该字段是否没有值(等于布尔值 false,如 0 或空字符串)

file1.if.isFalse.value = 103

.isFalse 不与任何特定的 value

进行比较
file1.if.isFalse.negate = 1

.negate 应该高一级,.isFalse 的否定将是 .isTrue


你需要的是比较平等。
这将是一个像这样的简单解决方案:

page.includeJSFooter {
    file1 = myscript.js
    file1.if.equals = 103
    file1.if.value.field = layout
}

如果您使用字段 backend_layout,您可能还会使用字段 backend_layout_next_level,它可以为下面的页面设置值。
然后你的 TS 看起来像:

page.includeJSFooter {
    file1 = myscript.js
    file1.if {
        equals {
            data = levelfield:-1,backend_layout_next_level,slide
            override.field = backend_layout
        }
        value = pagets__speciallayout
    } 
}

正在尝试从继承字段 backend_layout_next_level 获取布局,但字段 backend_layout 中的显式给定值具有优先权。

如果您碰巧使用 FLUID 进行页面渲染,您还可以通过 f.e 从页面模板中添加资源。将此 ViewHelper https://fluidtypo3.org/viewhelpers/vhs/master/Asset/ScriptViewHelper.html 用于 JavaScript 资产。

我个人认为这个逻辑属于模板而不是 TypoScript,这就是为什么我总是在我的模板中这样做。我使用自定义 ViewHelper,尽管它以与 TypoScript 相同的方式将资产添加到 pageRenderer,因此 PageRenderer 的所有压缩、合并和其他逻辑都适用于它们(不像 VHS viewHelper,它自己做事)。

如果您更喜欢 TypoScript 方式,我会使用 Bernd Wilke 建议的 if 条件

编辑:不幸的是,Bernds 示例中的 if 条件不正确,请尝试

page.includeJSFooter {
    file1 = myscript.js
    file1.if.value.field = layout
    file1.if.equals = 103
}

page.includeJSFooter {
    file1 = myscript.js
    file1.if {
      value {
        data = levelfield:-1,backend_layout_next_level,slide
        override.field = backend_layout
      }
      equals = pagets__speciallayout
    } 
}