Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 按typeNum动态更改Type3流体布局_Typo3_Fluid_Typo3 6.1.x_Flux - Fatal编程技术网

Typo3 按typeNum动态更改Type3流体布局

Typo3 按typeNum动态更改Type3流体布局,typo3,fluid,typo3-6.1.x,flux,Typo3,Fluid,Typo3 6.1.x,Flux,我正在使用扩展fluidpages,希望按typeNum切换布局。 是否可以根据条件更改f:布局? 这行不通: <f:layout name="{f:if(condition: '{typeNum} == 666', then: 'PageAjax', else: 'Page')}"/> 您不能改用if语句吗? IMHO这更容易阅读-如果您需要添加更多依赖于typeNum的参数,它将保持可读性 <f:if condition="{typeNum} == 666">

我正在使用扩展fluidpages,希望按typeNum切换布局。 是否可以根据条件更改f:布局? 这行不通:

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

您不能改用if语句吗? IMHO这更容易阅读-如果您需要添加更多依赖于typeNum的参数,它将保持可读性

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

我现在在布局模板中添加了条件。我从打字稿中得到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>

默认模板

Ajax模板

我在fedext页面上找到了一个示例,但无法运行: 建议的方法:

所需文件:

  • 参考资料/Private/Layouts/Page/0.html
  • 参考资料/Private/Layouts/Page/666.html
请注意:这仅在{typeNum}变量保证存在时有效-如果不存在,您将面临一个文件名为空的“模板文件未找到”错误。为了避免这种情况,您可以使用VHS扩展的
v:var.convert
ViewHelper来确保正确的值:


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

问题是,不能使用嵌套流体,如
中的其他流体。否则,您将在缓存文件中得到一个致命错误,即调用非对象上的成员函数getViewHelper()。当您查看缓存文件时,您会发现这是因为未定义
$self


因此,我的解决方案是,在\TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler中搜索
公共函数getLayoutName(
,并在
\$currentVariableContainer=\$renderingContext->getTemplateVariableContainer();
之前添加
\$self=\$this;
,就像
GenerateConfigorSection()

我只接受了内联if条件。但是,无论是基于标记还是内联写入,这都无关紧要。我想我无法访问f:layout部分中的流体if viewhelper。这将不起作用-原因是处理
f:layout
节点的值时没有实际呈现模板。这没有任何问题I don’我不能解释为什么上述方法不起作用。为了处理类似的问题,最好了解一下。