通过typeNum动态更改TYPO3流体布局

时间:2014-01-31 19:22:38

标签: typo3 fluid typo3-6.1.x flux

我正在使用扩展fluidpages并希望通过typeNum切换布局。 是否可以通过条件更改f:layout? 这不会起作用:

<f:layout name="{f:if(condition: '{typeNum} == 666', then: 'PageAjax', else: 'Page')}"/>

4 个答案:

答案 0 :(得分:4)

建议的方法:

<f:layout name="Page/{typeNum}"/>

必填文件:

  • 资源/专用/布局/页/ 0.html
  • 资源/专用/布局/页/ 666.html

请注意:这仅适用于{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>