如何在typo3 9版式中呈现不同的模板?

时间:2019-05-17 08:53:19

标签: templates typo3 rendering typo3-9.x

我有这些模板结构

Resources/private/Layouts/default.html

Resources/private/Partials/Footer.html
Resources/private/Partials/Header.html
Resources/private/Partials/Search.html

Resources/private/Templates/Default.html

我想渲染1列结构,2列结构,Default(Home)页面结构。

这是我的setup.typoscript

page {
    typeNum = 0
    shortcutIcon = EXT:demo_site/Resources/Public/Icons/favicon.ico

    10 = FLUIDTEMPLATE
    10 {
        templateName = TEXT
        templateName.stdWrap.cObject = CASE
        templateName.stdWrap.cObject {
            key.data = pagelayout

            pagets__default = TEXT
            pagets__default.value = Default

            pagets__2column = TEXT
            pagets__2column.value = 2column

            pagets__1column = TEXT
            pagets__1column.value = 1column

            default = TEXT
            default.value = Default

            default <.pagets__2column

资源/专用/模板/Default.html

     <f:section name="Jumbotron">
      --------
     </f:section>
    <f:section name="2column">
    --------
    </f:section>
   <f:section name="1column">
   --------
   </f:section>

资源/专用/布局/default.html

<f:if condition ="{templateName} == 'Jumbotron'">
     <f:render section="Jumbotron"/>
</f:if>


  <f:if condition ="{templateName} == '2column'">
    <f:render section="2column"/>
  </f:if>

  <f:if condition ="{templateName} == '1column'">
    <f:render section="1column"/>
  </f:if>

我的页眉页脚已成功包含在内。但是我在渲染不同的模板时遇到了问题。 因此,请告诉我,如果条件允许,我会使用权利吗?如果不是,请告诉解决方案我应该怎么做才能渲染不同的模板?

1 个答案:

答案 0 :(得分:3)

除了一些误解或错别字:
您选择了其他模板,但尚未将模板名称作为变量提供给模板。

在templateName定义之后,FLUIDTEMPLATE对象中需要类似以下内容:

page.10 {
    templateName = ...
    templateName.stdWrap.cObject {
        :
    }

    // copy template name to a variable:
    variables.templateName < .templateName

    // define further variables:
    variables {
        :
    }
}

您似乎并没有真正使用不同的模板,但是您可能希望对不同的布局使用不同的局部(或部分)。
然后,您不需要其他模板文件,也不需要定义page.10.templateName。确保具有流体变量的构造。



您的default对象中有两个CASE分配。第一个将被第二个覆盖。 (具有相同的值)


您将字段pagelayout与通常用于字段backend_layoutbackend_layout_next_level的值一起使用。



也许这对您来说是一个干净的解决方案:

page {
    10 = FLUIDTEMPLATE
    10 {
        templateName = Default

        variables {
            templateName = CASE
            templateName {
                key.data = levelfield:-1, backend_layout_next_level, slide
                key.override.field = backend_layout

                default = TEXT
                default.value = Default 

                pagets__default = TEXT
                pagets__default.value = Default

                pagets__2column = TEXT
                pagets__2column.value = 2column

                pagets__1column = TEXT
                pagets__1column.value = 1column

                :
            }
            :
        }
    }
}

,并且您的模板文件(Default.html)应该保持此呼叫:

<f:render section="{templateName}" arguments="{_all}" />

尽管我宁愿使用局部变量而不是节,并且将变量重命名为layout之类的变量,因为它没有选择模板