我正在使用扩展程序fluidpages,并希望通过typeNum切换布局。
是否可以通过条件更改f:layout?
以下内容无法实现:
<f:layout name="{f:if(condition: '{typeNum} == 666', then: 'PageAjax', else: 'Page')}"/>
<f:layout name="{f:if(condition: '{typeNum} == 666', then: 'PageAjax', else: 'Page')}"/>
建议的做法:
<f:layout name="Page/{typeNum}"/>
所需文件:
请注意:只有当{typeNum}变量存在时,它才能正常工作 - 如果不存在,您将面临“找不到模板文件”的错误,并显示空文件名。为了避免这种情况,您可以使用VHS扩展中的v:var.convert
ViewHelper来确保一个正确的值:
<f:layout name="Page/{typeNum -> v:var.convert(type: 'integer')}"/>
我现在在布局模板中添加了Condition。我从typoscript获取typeNum。
<f:if condition="{f:cObject(typoscriptObjectPath:'plugin.nc_template.settings.pageLayout')} == 'Default'">
<p>Default Template</p>
</f:if>
<f:if condition="{f:cObject(typoscriptObjectPath:'plugin.nc_template.settings.pageLayout')} == 'Ajax'">
<p>Ajax Template</p>
</f:if>
你不能使用if语句代替吗? 在我看来,这样更容易阅读 - 如果您需要添加更多依赖于typeNum的参数,则它将保持可读性。
<f:if condition="{typeNum} == 666">
<f:then>
<f:layout name="PageAjax">
</f:then>
<f:else>
<f:layout name="Page">
</f:else>
</f:if>
f:layout
节点的值在没有实际渲染模板的情况下被处理。 - Claus Due