如何在布局 typo3 9 中呈现不同的模板?
How to render different templates in layout typo3 9?
我有这些模板结构
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 列结构、默认(主页)页面结构。
这是我的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
Resources/private/Templates/Default.html
<f:section name="Jumbotron">
--------
</f:section>
<f:section name="2column">
--------
</f:section>
<f:section name="1column">
--------
</f:section>
Resources/private/Layouts/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>
我的页眉页脚已成功包含。但是我在渲染不同的模板时遇到问题。
所以请告诉我,我是否使用正确的 if 条件?如果不是那么请告诉解决方案我应该怎么做才能呈现不同的模板?
除了一些误解或拼写错误:
您选择了不同的模板,但没有将模板名称作为变量提供给您的模板。
您的 FLUIDTEMPLATE
对象在 templateName 定义之后需要这样的东西:
page.10 {
templateName = ...
templateName.stdWrap.cObject {
:
}
// copy template name to a variable:
variables.templateName < .templateName
// define further variables:
variables {
:
}
}
看起来您并没有真正使用不同的模板,但您可能想为不同的布局使用不同的部分(或部分)。
那么你就不需要不同的模板文件和page.10.templateName的定义了。确保具有 fluid-variable.
的结构
您的 CASE
对象中有两个 default
赋值。第一个将被第二个覆盖。 (具有相同的值)
您将字段 pagelayout
与通常用于字段 backend_layout
和 backend_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
的名称,因为它不选择模板
我有这些模板结构
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 列结构、默认(主页)页面结构。
这是我的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
Resources/private/Templates/Default.html
<f:section name="Jumbotron">
--------
</f:section>
<f:section name="2column">
--------
</f:section>
<f:section name="1column">
--------
</f:section>
Resources/private/Layouts/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>
我的页眉页脚已成功包含。但是我在渲染不同的模板时遇到问题。 所以请告诉我,我是否使用正确的 if 条件?如果不是那么请告诉解决方案我应该怎么做才能呈现不同的模板?
除了一些误解或拼写错误:
您选择了不同的模板,但没有将模板名称作为变量提供给您的模板。
您的 FLUIDTEMPLATE
对象在 templateName 定义之后需要这样的东西:
page.10 {
templateName = ...
templateName.stdWrap.cObject {
:
}
// copy template name to a variable:
variables.templateName < .templateName
// define further variables:
variables {
:
}
}
看起来您并没有真正使用不同的模板,但您可能想为不同的布局使用不同的部分(或部分)。
那么你就不需要不同的模板文件和page.10.templateName的定义了。确保具有 fluid-variable.
您的 CASE
对象中有两个 default
赋值。第一个将被第二个覆盖。 (具有相同的值)
您将字段 pagelayout
与通常用于字段 backend_layout
和 backend_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
的名称,因为它不选择模板