TypoScript 在 Fluid 模板中的最佳用法是什么?
What is the best usage of TypoScript in Fluid templates?
如果我想在 Fluid 模板中使用类似菜单生成的 TypoScript,我有两种可能的方法:
使用 TypoScript 为模板填充变量。这样做:
page.10 = FLUIDTEMPLATE
page.10 {
templateName = index.html
// ... define pathes ...
variables {
contentMain < styles.content.get
mainMenu < temp.mainMenu
:
}
}
并且在模板中只使用变量:
<div class="header">
<div class="logo">{logo->f:format.raw()}</div>
<div class="main-menu">{mainMenu->f:format.raw()}</div>
</div>
另一种方法是使用 f:cObject ViewHelper 调用部分 TypoScript。
打字错误:
page.10 = FLUIDTEMPLATE
page.10 {
templateName = index.html
// ... define pathes ...
variables {
contentMain < styles.content.get
:
}
}
lib.mainMenu < temp.mainMenu
流体模板如下所示:
<div class="header">
<div class="logo">{logo->f:format.raw()}</div>
<div class="main-menu">
<f:cObject typoscriptObjectPath="lib.mainMenu />
</div>
</div>
所以。我的问题:每种方式的优缺点是什么?
不同版本的TYPO3有区别吗?
您应该为无条件或严重依赖于当前页面上下文呈现的所有元素使用模板变量。
根据其他记录值呈现的元素最好通过 cObject
viewhelper 使用。
技术上没有太大区别,只要结果缓存在页面缓存中即可。更喜欢哪种方法只是品味和可读性的问题。
both 方法可以使用 dataProcessors
到 return 数组或对象,这些数组或对象可以在模板中迭代或以其他方式处理。特别是对于菜单生成,即将推出的 TYPO3 8.x LTS
将有一个菜单处理器,可以将菜单作为数组输出。请参阅功能 #78672
(自 TYPO3 8.5
起包含)。如果您使用类似的东西,那么我建议始终将其作为变量传递。这使它更加清晰,并且不会将其隐藏在模板中。
我不同意 pgampe 的意见,因为 关于这两种方法存在很大差异!
如果您使用的是变量,那么这些变量总是呈现,即使那些内容元素没有在前端使用。这可能会产生非常难以解决的巨大副作用。一些例子
- 您在某个专栏的页面上有一些沉重的 USER_INT 插件(不再使用)。即使它们从未显示,它们仍将被调用
- 您正在使用 EXT:news 和功能
ExcludeDisplayedNews
。如果有一个新闻插件以某种方式通过变量呈现(但从未输出),则呈现和显示的新闻插件将丢失新闻记录
如果我想在 Fluid 模板中使用类似菜单生成的 TypoScript,我有两种可能的方法:
使用 TypoScript 为模板填充变量。这样做:
page.10 = FLUIDTEMPLATE page.10 { templateName = index.html // ... define pathes ... variables { contentMain < styles.content.get mainMenu < temp.mainMenu : } }
并且在模板中只使用变量:
<div class="header"> <div class="logo">{logo->f:format.raw()}</div> <div class="main-menu">{mainMenu->f:format.raw()}</div> </div>
另一种方法是使用 f:cObject ViewHelper 调用部分 TypoScript。
打字错误:page.10 = FLUIDTEMPLATE page.10 { templateName = index.html // ... define pathes ... variables { contentMain < styles.content.get : } } lib.mainMenu < temp.mainMenu
流体模板如下所示:
<div class="header"> <div class="logo">{logo->f:format.raw()}</div> <div class="main-menu"> <f:cObject typoscriptObjectPath="lib.mainMenu /> </div> </div>
所以。我的问题:每种方式的优缺点是什么?
不同版本的TYPO3有区别吗?
您应该为无条件或严重依赖于当前页面上下文呈现的所有元素使用模板变量。
根据其他记录值呈现的元素最好通过 cObject
viewhelper 使用。
技术上没有太大区别,只要结果缓存在页面缓存中即可。更喜欢哪种方法只是品味和可读性的问题。
both 方法可以使用 dataProcessors
到 return 数组或对象,这些数组或对象可以在模板中迭代或以其他方式处理。特别是对于菜单生成,即将推出的 TYPO3 8.x LTS
将有一个菜单处理器,可以将菜单作为数组输出。请参阅功能 #78672
(自 TYPO3 8.5
起包含)。如果您使用类似的东西,那么我建议始终将其作为变量传递。这使它更加清晰,并且不会将其隐藏在模板中。
我不同意 pgampe 的意见,因为 关于这两种方法存在很大差异!
如果您使用的是变量,那么这些变量总是呈现,即使那些内容元素没有在前端使用。这可能会产生非常难以解决的巨大副作用。一些例子
- 您在某个专栏的页面上有一些沉重的 USER_INT 插件(不再使用)。即使它们从未显示,它们仍将被调用
- 您正在使用 EXT:news 和功能
ExcludeDisplayedNews
。如果有一个新闻插件以某种方式通过变量呈现(但从未输出),则呈现和显示的新闻插件将丢失新闻记录