Fluid模板中TypoScript的最佳用法是什么?

问题描述 投票:4回答:2

如果我想在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的一部分。 TypoScript: page.10 = FLUIDTEMPLATE page.10 { templateName = index.html // ... define pathes ... variables { contentMain < styles.content.get : } } lib.mainMenu < temp.mainMenu Fluid模板看起来像这样: <div class="header"> <div class="logo">{logo->f:format.raw()}</div> <div class="main-menu"> <f:cObject typoscriptObjectPath="lib.mainMenu /> </div> </div>

所以。我的问题:每种方式的优点和缺点是什么? TYPO3的不同版本是否存在差异?

typo3 typoscript fluid
2个回答
4
投票

我不同意pgampe的观点,因为这两种方法存在很大差异!

如果使用变量,那么总是会渲染变量,即使这些内容元素未在前端使用。这可能会产生巨大的副作用,而且很难解决。一些例子

  • 您在列中的页面上有一些重的USER_INT插件(不再使用)。即使它们从未显示过,它们仍然会被调用
  • 您正在使用EXT:新闻和ExcludeDisplayedNews功能。如果有一个通过变量以某种方式呈现的新闻插件(但从未输出),则呈现并显示的新闻插件将错过新闻记录

2
投票

您应该对所有无条件渲染或严重依赖于当前页面上下文的元素使用模板变量。

通过cObject viewhelper可以更好地使用根据其他记录值呈现的元素。

从技术上讲,只要结果缓存在页面缓存中就没有太大区别。这只是品味和可读性的问题。

这两种方法都可以使用dataProcessors返回可以在模板中迭代或以其他方式处理的数组或对象。特别是对于菜单生成,即将推出的TYPO3 8.x LTS将有一个菜单处理器,将菜单作为数组吐出。见功能#78672(包括自TYPO3 8.5以来)。如果您使用类似的东西,那么我建议始终将其作为变量传递。这使得它更加清晰,并且不会将其隐藏在模板中。

https://docs.typo3.org/typo3cms/extensions/core/8-dev/Changelog/8.5/Feature-78672-IntroduceFluidDataProcessorForMenus.html

© www.soinside.com 2019 - 2024. All rights reserved.