2

我正在使用扩展流体页面,并希望通过 typeNum 切换布局。是否可以通过条件更改 f:layout?这行不通:

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

4 回答 4

4

建议的方法:

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

所需文件:

  • 资源/私人/布局/页面/0.html
  • 资源/私人/布局/页面/666.html

请注意:这仅在保证 {typeNum} 变量存在时才有效 - 如果不存在,您将面临“找不到模板文件”错误且文件名为空。为避免这种情况,您可以使用 VHS 扩展的v:var.convertViewHelper 来确保正确的值:

<f:layout name="Page/{typeNum -> v:var.convert(type: 'integer')}"/>

于 2014-03-19T16:12:21.750 回答
0

我现在已经在布局模板中添加了条件。我从打字稿中得到 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 页面上找到了一个示例,但无法运行: https ://fedext.net/blog/archive.html?tx_news_pi1[news]=55&tx_news_pi1[%40widget_0][currentPage]=8&cHash=f9c3165598a28d2aa98fd30ef115bb75

于 2014-02-05T08:19:19.577 回答
0

我最近遇到了同样的问题,经过几次研究找到了解决方案。

问题是,您不能使用嵌套流体<f:if>,如. 否则,你会在缓存文件中得到一个致命错误,说而且当你查看缓存文件时,你会发现它是因为没有定义。<f:cObject><f:layout>call to a member function getViewHelper() on a non-object.$self

因此,我的解决方案是,public function getLayoutName(在 \TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler 中搜索,然后添加\$self = \$this;before \$currentVariableContainer = \$renderingContext->getTemplateVariableContainer();,就像generateCodeForSection()

于 2016-10-18T09:11:51.673 回答
-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>
于 2014-02-04T07:52:28.140 回答