Условие внутри FLUID для проверки наличия содержимого в столбце - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю с пакетом сайта Бена Котта для 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>

это не работает, хотя.Я не могу сказать, есть ли неправильный синтаксис или это невозможно.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Другим решением может быть выделенный объект TypoScript, который можно использовать в Fluid, если условия

################################################
#### 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 без рабочих пространств

0 голосов
/ 06 декабря 2018
{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. Предотвращает двойную визуализацию объекта typoscript, двойные запросы к БД и т. Д.
  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(), а затем выражение можно использовать в качестве значения атрибута тега.

...