【问题标题】:TYPO3 Partials rendering does not work properlyTYPO3 Partials 渲染无法正常工作
【发布时间】:2018-07-30 17:48:50
【问题描述】:

问题如下。我做了一个扩展,我有一个列表视图和详细视图。列表视图工作正常。当我进入详细视图并尝试通过 Show.html 呈现 Partial 时,就会出现问题。 结构后会详细说明问题。

这是结构:

↳ 私人

     ↳ 部分

         ↳ 详细信息

            ↳ 公寓

     ↳ 模板

         ↳ ImmobilieImport

            ↳ List.html

            ↳ Show.html

所以在 Show.html 我有这个:

<f:render partial="Detail/Apartment" arguments="{_all}" />

在 Apartment.html 上我有一个要读取的变量:

{immobilieImport.street}

当我调用列表视图并单击一个对象时,它会按照预期将我重定向到详细视图。我得到了正确的值,一切正常。但是当我回到另一个对象并单击它以访问详细视图时,它不会呈现部分或 Show.html。

我的配置中有no_cache = 0,另外我也在页面属性上关闭了缓存。

当我使用&lt;f:debug&gt;{immobilieImport}&lt;/f:debug&gt; 时,我得到了所有正确的值,但它不会在前端显示 html。

TYPO3 版本 7.6.23

任何想法发生了什么?如果您需要更多信息,请随时询问。

最好的问候

【问题讨论】:

  • 当你设置config.no_cache = 1时是否全部显示正确?那么你可能有一个cHash 问题。

标签: php typo3 render fluid partials


【解决方案1】:

我找到了解决问题的方法,我会详细解释,如果其他人有同样的问题,他可以找到答案。

如果有人使用 FlexForm 设置,问题可能会很常见。

在我的列表视图中,我有一个 &lt;f:if&gt; 声明,我在其中评估创建日期是否小于 30 天。我通过让用户自己定义时间来使其灵活。为了让用户这样做,您需要在 FlexForm 上添加设置。所以在我的 FlexForm 上,我有这个:

<settings.timeToGetOld>
   <TCEforms>
      <label>Number of days that stays as "New"</label>
      <displayCond>FIELD:switchableControllerActions:=:ImmobilieImport->list;ImmobilieImport->show</displayCond>
      <config>
         <type>input</type>
         <size>6</size>
         <max>6</max>
         <eval>int</eval>
         <default>30</default>
      </config>
   </TCEforms>
</settings.timeToGetOld>

FIELD:switchableControllerActions:=:ImmobilieImport->list;ImmobilieImport->显示

这实际上只是列表视图,它是这样写的,因为它是“控制器动作组合”。

在我的控制器和列表操作上:

$this->view->assign('settings', $this->settings);

然后在我的液体上:

f:if condition="{f:format.date(date: '{immobilieImport.creationDate}', format: 'Y-m-d')} > {f:format.date(date: 'now-{settings.timeToGetOld} days', format: 'Y-m-d')}"><span class="new_object">New</span>

当我尝试在我的详细视图上使用该评估时,问题出现了。由于我没有为详细视图指定任何设置字段,因此流体引擎无法处理评估,因此它通过不显示任何内容来通过错误。鉴于它从上到下读取文档,当流体引擎遇到问题时,它会停止。

在找出问题所在后,我在 FlexForm 上又添加了一项设置:

<settings.timeToGetOldDetailView>
       <TCEforms>
          <label>Number of days that stays as "New"</label>
          <displayCond>FIELD:switchableControllerActions:=:ImmobilieImport->show</displayCond>
          <config>
             <type>input</type>
             <size>6</size>
             <max>6</max>
             <eval>int</eval>
             <default>30</default>
          </config>
       </TCEforms>
    </settings.timeToGetOldDetailView>

现在我已将 displayCond 仅更改为 Detail View (Show),并且我已将 Fluid (Show.html) 更改为 {settings.timeToGetOldDetailView}

f:if condition="{f:format.date(date: '{immobilieImport.creationDate}', format: 'Y-m-d')} > {f:format.date(date: 'now-{settings.timeToGetOldDetailView} days', format: 'Y-m-d')}"><span class="new_object">New</span>

我也在我的控制器上添加了这个:

$this->view->assign('settings', $this->settings);

现在一切正常。

【讨论】: