我正在使用扩展fluidpages并希望通过typeNum切换布局。 是否可以通过条件更改f:layout? 这不会起作用:
<f:layout name="{f:if(condition: '{typeNum} == 666', then: 'PageAjax', else: 'Page')}"/>
答案 0 :(得分:4)
建议的方法:
<f:layout name="Page/{typeNum}"/>
必填文件:
请注意:这仅适用于{typeNum}变量保证存在的情况 - 如果不存在,您将面临未找到的&#34;模板文件&#34;文件名为空的错误。为避免这种情况,您可以使用VHS扩展程序的v:var.convert
ViewHelper来确保正确的值:
<f:layout name="Page/{typeNum -> v:var.convert(type: 'integer')}"/>
答案 1 :(得分:0)
我现在已在布局模板中添加了条件。我从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>
我在fedext Page上找到了一个示例,但无法运行: https://fedext.net/blog/archive.html?tx_news_pi1[news]=55&tx_news_pi1[%40widget_0][currentPage]=8&cHash=f9c3165598a28d2aa98fd30ef115bb75
答案 2 :(得分:0)
我最近遇到了同样的问题,经过一些研究后找到了解决方案。
问题是,您不能使用<f:if>
,<f:cObject>
或<f:layout>
中的其他嵌套流体。否则,您将在缓存文件中收到致命错误,说call to a member function getViewHelper() on a non-object.
当您查看缓存文件时,您会发现它,因为$self
未定义。
因此,我的解决方案是,在\ TYPO3 \ CMS \ Fluid \ Core \ Compiler \ TemplateCompiler中搜索public function getLayoutName(
,然后在\$self = \$this;
之前添加\$currentVariableContainer = \$renderingContext->getTemplateVariableContainer();
,就像generateCodeForSection()
一样
答案 3 :(得分:-2)
你不能使用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>