如何基于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
}
}
我正在使用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
}
}