0

我正在使用 Ben Kott 为 Typo3 9.5 编写的站点包,并将内容包含到我的流体模板中,如下所示:

<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '1'}" />

我试图把它包装成一种像液体一样的状态

<f:if condition="<f:cObject typoscriptObjectPath='lib.dynamicContent' data='{colPos: \'1\'}'">     
    whatever  
</f:if>

但它不起作用。我不知道是否有任何错误的语法或是否不可能。

4

2 回答 2

4
{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: {colPos: 1}) -> f:variable(name: 'content')}
<f:if condition="{content}">
   There is content. Here it is:
   {content -> f:format.raw()}
</f:if>
  1. 避免对打字稿对象的双重渲染、双重数据库请求等。
  2. 避免标签属性中的标签语法,这在未来的 Fluid 版本中可能无法做到

为后代编辑:上面代码失败的确切原因似乎是语法错误:

<f:if condition="<f:cObject typoscriptObjectPath='lib.dynamicContent' data='{colPos: \'1\'}'"> 

应该:

<f:if condition="<f:cObject typoscriptObjectPath='lib.dynamicContent' data='{colPos: \'1\'}' />">

由于内部标签没有关闭。不过,您仍然应该避免使用它 - 改用内联语法。在我上面的代码中,您可以删除该-> f:variable()部分,然后表达式可以用作标签属性值。

于 2018-12-06T13:18:44.800 回答
1

另一种解决方案是一个专用的 TypoScript 对象,您可以在 Fluid if 条件下使用它

################################################
#### COUNT CONTENT LIB FOR USAGE IN FLUID ####
################################################
#
#  EXAMPLE: amount of content elements in colPos 1 of actual PID
#  ---------------
#  <f:cObject typoscriptObjectPath="lib.countContent" data="{colPos: 1}" />
#  {f:cObject(typoscriptObjectPath: 'lib.countContent', data: '{colPos: 1}')}
#
#  EXAMPLE: amount of content elements in more than one colPos of actual PID
#  ---------------
#  <f:cObject typoscriptObjectPath="lib.countContent" data="{colPos: '1,2'}" />
#  {f:cObject(typoscriptObjectPath: 'lib.countContent', data: '{colPos: \'1,2\'}')}
#
#
#
#
#  Usage examples:
#  --------------
#
#  <f:if condition="{f:cObject(typoscriptObjectPath: 'lib.countContent', data: '{colPos: 1}')}">
#      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '1', wrap: '<aside class=\"l-aside\">|</aside>'}" />
#  </f:if>
#
#
#  <f:if condition="{f:cObject(typoscriptObjectPath: 'lib.countContent', data: '{colPos: 1}')}">
#      <aside class="l-aside">
#         <f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '1'}" />
#      </aside>
#  </f:if>
#
#
###############
lib.countContent = COA
lib.countContent {
    5 = LOAD_REGISTER
    5 {
        colPos.cObject = TEXT
        colPos.cObject {
            field = colPos
            ifEmpty.cObject = TEXT
            ifEmpty.cObject {
                value.current = 1
                ifEmpty = 0
            }
        }
        pageUid.cObject = TEXT
        pageUid.cObject {
            field = pageUid
            ifEmpty.data = TSFE:id
        }
        contentFromPid.cObject = TEXT
        contentFromPid.cObject {
            data = DB:pages:{register:pageUid}:content_from_pid
            data.insertData = 1
        }
    }
    20 = CONTENT
    20 {
        table = tt_content
        select {
            selectFields = count(uid) AS counter
            where = {#colPos} IN({register:colPos})
            where.insertData = 1
            pidInList.data = register:pageUid
            pidInList.override.data = register:contentFromPid
            andWhere = (deleted = 0 AND hidden = 0)
        }

        renderObj = COA
        renderObj {
            10 = TEXT
            10 {
                data = field:counter
            }
        }
    }
    90 = RESTORE_REGISTER
}

这个片段在没有工作区的 TYPO3 8.7 LTS 中经过测试和使用

于 2018-12-06T20:15:52.013 回答