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

时间:2016-12-31 18:40:06

标签: typo3 typoscript fluid

如果我想在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的不同版本是否存在差异?

2 个答案:

答案 0 :(得分:4)

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

如果您正在使用变量,则始终呈现这些变量,即使这些内容元素未在前端中使用。这可能会产生巨大的副作用,而且很难解决。一些例子

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

答案 1 :(得分: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