Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 打字稿在流体模板中的最佳用途是什么?_Typo3_Typoscript_Fluid - Fatal编程技术网

Typo3 打字稿在流体模板中的最佳用途是什么?

Typo3 打字稿在流体模板中的最佳用途是什么?,typo3,typoscript,fluid,Typo3,Typoscript,Fluid,如果我想在流体模板中使用类似打字脚本的菜单生成,我有两种可能的方法: 使用打字脚本为模板填充变量。这样做: page.10 = FLUIDTEMPLATE page.10 { templateName = index.html // ... define pathes ... variables { contentMain < styles.content.get mainMenu < temp.mainMenu

如果我想在流体模板中使用类似打字脚本的菜单生成,我有两种可能的方法:

  • 使用打字脚本为模板填充变量。这样做:

    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">
            <f:cObject typoscriptObjectPath="lib.mainMenu />
        </div>
    </div> 
    
    page.10=FLUIDTEMPLATE
    第9.10页{
    templateName=index.html
    //…定义路径。。。
    变数{
    contentMain
    在模板中,只需使用变量:

    <div class="header">
        <div class="logo">{logo->f:format.raw()}</div>
        <div class="main-menu">{mainMenu->f:format.raw()}</div>
    </div> 
    
    
    {logo->f:format.raw()}
    {main menu->f:format.raw()}
    
  • 另一种方法是使用f:cObject ViewHelper调用打字脚本的一部分。
    打字稿:

    page.10 = FLUIDTEMPLATE
    page.10 {
        templateName = index.html
        // ... define pathes ...
        variables {
            contentMain < styles.content.get
            :
        }
    }
    lib.mainMenu < temp.mainMenu
    
    page.10=FLUIDTEMPLATE
    第9.10页{
    templateName=index.html
    //…定义路径。。。
    变数{
    contentMain
    流体模板如下所示:

    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">
            <f:cObject typoscriptObjectPath="lib.mainMenu />
        </div>
    </div> 
    
    
    {logo->f:format.raw()}
    
    对于无条件呈现或严重依赖于当前页面上下文的所有元素,都应该使用模板变量

    根据其他记录值呈现的元素最好通过
    cObject
    viewhelper使用

    从技术上讲,只要结果缓存在页面缓存中,就没有多大区别。选择哪种方法只是口味和可读性的问题

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


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

    如果您使用的是变量,那么即使前端没有使用这些内容元素,也会始终呈现这些变量。这会产生巨大的副作用,很难解决。一些例子

    • 你在一个栏目的页面上有一些大量的用户插件,这些插件已经不再使用了。即使它们从未显示,它们仍将被调用
    • 您正在使用EXT:news和功能
      excludedDisplayedNews
      。如果有一个新闻插件以某种方式通过变量呈现(但从未输出),则呈现和显示的新闻插件将丢失新闻记录

    我说得对吗?依赖于当前页面数据的页面部分应用作模板变量。e、 g.来自页面记录、菜单(至少在8之前)和所有列的所有内容(tt_内容)的所有数据。”无条件地'?语言条件或其他你通常认为是打字条件的条件呢?未缓存渲染的运行时行为是什么?我假设VH调用的值不好,而不是模板变量。理论上,ViewHelper在每一次调用中都应该优于TS dataProcessors,但有一个可能的例外:在系统缓存刷新之后,需要重新编译流体模板,这会导致第一次渲染时的速度减慢。之后,ViewHelper将仅在实际渲染时执行,并将作为纯PHP执行,不涉及解析。基于数据处理器的设置完全不能实现这种选择性,如果我错了,会纠正我,并不断地重新执行这个TS,就像f:cObject一样。如果性能是您的度量标准,那么不推荐任何膨胀的解决方案。这取决于您在模板制作中是喜欢推式方法还是拉式方法。推送方法可能会导致生成太多的数据,而拉式方法往往会使模板变得混乱(请参见wordpress),并使跟踪依赖项变得困难。@由于只解析一次,之后只传递数组的一部分。与IO相比,TS解析速度相当快,尽管它可以更快。为了节省渲染时间,应该尽可能多地缓存(完整页面、部分页面)。缓存失效可能是一个问题。@p这通常是正确的,但在数据处理器的情况下不是这样!它的工作原理与普通TS非常不同,因为它只定义必须处理的内容。这就是为什么我(小心地)选择了“执行”和“重新执行”而不是解析。即便如此:更大的TS意味着更高的执行时间,而不管缓存如何。我认为,每次提到数据处理器时,这条信息都是至关重要的。很简单,这是预渲染输出部分的副作用。我个人的建议是将繁重的渲染粘贴到流体模板中——一般来说,这意味着避免使用数据处理器,并使用VHS软件包或您自己编写的ViewHelper。或者只是使用f:cObject渲染的老式TS对象(它不会遇到“必须事先渲染所有内容”的问题)。