如何检查typo3 流体模板中的列内容?

Dav*_*vid 2 typo3 fluid

我有一个typo3流体模板,我想在渲染某些元素之前检查内容是否存在。有没有一种有效的方法来做到这一点?例如。

<f:if condition="{contentInColPos0}">
  <div class="section-content">
    <f:render section="Main" />
  </div>
</f:if>
Run Code Online (Sandbox Code Playgroud)

是否有内置变量或简单的方法来检查列位置中是否存在内容?这是 CMS 模板中的一个常见任务(除非有东西要显示,否则不要渲染这部分),但我似乎找不到简单的方法。

lor*_*enz 6

没有简单的方法可以做到这一点。但是您可以使用一些 TypoScript,然后将计数传递给 Fluid 并在条件下使用它:

lib.countContent = CONTENT
lib.countContent {
   table = tt_content
   select {
     selectFields = count(uid) AS count
     pidInList = this
     andWhere = (deleted = 0 AND hidden = 0)
   }

   renderObj = COA
   renderObj {
     10 = TEXT
     10 {
       data = field:count
     }
}
Run Code Online (Sandbox Code Playgroud)

此对象将输出给定页面上的内容行数,并可在 Fluid 中访问:

<f:if condition="{f:cObject(typoscriptObjectPath:'lib.countContent')} > 0">
  Then show some stuff
</f:if>
Run Code Online (Sandbox Code Playgroud)

如果您无论如何要使用内容并且在您的内容对象中没有全局换行,您也可以直接使用它,因为 Fluid IfViewHelper 检查空字符串。因此,例如这可能会更好地工作:

lib.content < styles.content.get
Run Code Online (Sandbox Code Playgroud)

(如果没有内容,则此对象为空)

<f:if condition="{f:cObject(typoscriptObjectPath:'lib.content')}">
  <f:then>
    <f:format.html>{lib.content}</f:format.html>
  </f:then>
  <f:else>
    No content found
  </f:else>
</f:if>   
Run Code Online (Sandbox Code Playgroud)