Передайте переменную объекту содержимого, содержащему плагин tx_news

Это очень похоже на мой вопрос Счетчик элементов маски в TYPO3 столбец

Мне нужно передать переменную (в моем случае значение cObj:parentRecordNumber, которое является счетчиком для текущего элемента в этом столбце) в шаблон.

В шаблоне главной страницы:

<f:cObject typoscriptObjectPath="lib.content.pageteasers" />

В опечатке:

lib.content {
    pageteasers < styles.content.get
    pageteasers {
        select {
            where = colPos=2
            max = 8
        }
        // this passes the variable elementCounter to the fluid template of the rendered mask content element:
        renderObj.mask_teaser {
            variables {
                elementCounter = TEXT
                elementCounter.value = {cObj:parentRecordNumber}
                elementCounter.insertData = 1
            }
        }
        // this should pass the same value to a rendered tx_news plugin: 
        variables {
                elementCounter = TEXT
                elementCounter.value = {cObj:parentRecordNumber}
                elementCounter.insertData = 1
        }
        // it doesn't. what about these trial & error:
        renderObj.list < .variables
        renderObj.plugin.tx_news < .variables
        renderObj.list.20.news_pi1 < .variables
        renderObj.news_pi1 < .variables
        // none of these seem to work either 
    }
 }

А затем в визуализированном шаблоне CE (News/List.html)

<f:debug title="" inline="1">{_all}</f:debug>

Мне не удается увидеть здесь указанную выше переменную. Как правильно передать переменную из TS в шаблон флюида новостей?


PS Еще одна попытка заключалась в использовании старого доброго реестра.

pageteasers < styles.content.get
pageteasers {
    select {
        where = colPos=2
        max = 8
    }
    append = LOAD_REGISTER
    append {
      elementCounter = TEXT
      elementCounter.value = {cObj:parentRecordNumber}
      elementCounter.insertData = 1
   }
}

И в шаблоне:

{v:variable.register.get(name: 'elementCounter')}

но это NULL


person Urs    schedule 16.07.2021    source источник
comment
Ваш фрагмент работает для CE cType FLUIDTEMPLATE. Плагины имеют тип USER / USER_INT и (обычно) не имеют переменные свойств.   -  person Julian Hofmann    schedule 16.07.2021
comment
Есть ли обходной путь для связи с плагином?   -  person Urs    schedule 16.07.2021
comment
Но в конце концов плагин использует FLUIDTEMPLATE, не так ли? Неужели я не могу как-нибудь до него добраться?   -  person Urs    schedule 16.07.2021
comment
Плагин использует Fluid-Template, да. Но это не проходит через переменные. Не путайте Fluid-Template (= ›HTML) и FLUIDTEMPLATE-cObject (=› TypoScript). В вашем случае (отображение значения cObject) нет необходимости передавать его через переменные в шаблон. CObject-Viewhelper должен решить эту проблему: docs.typo3.org/other/typo3/view-helper-reference/10.4/en-us/   -  person Julian Hofmann    schedule 16.07.2021
comment
Спасибо, Джулиан. Однако я не уверен, как интерпретировать ваше предложение решения. Вы можете привести пример в качестве ответа? cObj:parentRecordNumber по умолчанию недоступен в объекте содержимого.   -  person Urs    schedule 18.07.2021
comment
PS tx_news имеет свойство contentObjectData, которое уже отображается. Но это не содержит желаемой информации   -  person Urs    schedule 18.07.2021
comment
Во фрагментах кода вы всегда включаете {cObj:parentRecordNumber}. Вместо того, чтобы включать это в TypoScript, вы можете использовать <f:cObject typoscriptObjectPath="parentRecordNumber" /> непосредственно в шаблоне Fluid. Откуда вы берете parentRecordNumber? Разве это не глобальный TS-объект?   -  person Julian Hofmann    schedule 18.07.2021
comment
Нет, это свойство (?) GetText docs.typo3.org/m/typo3/reference-typoscript/master/en-us/   -  person Urs    schedule 19.07.2021
comment
О, не знал этого до сих пор: -o (docs.typo3.org/m/typo3/reference-typoscript/master/en-us/) Всегда есть вещи / особенности, о которых вы не знаете даже спустя годы работа с TYPO3 ... :-)   -  person Julian Hofmann    schedule 19.07.2021


Ответы (1)


Ваша попытка через регистр может сработать. Но вы должны заботиться о том, где вы что делаете ...

Registers

LOAD_REGISTER - это типа string / stdWrap и not cObject по определению. Если вы хотите использовать контент на основе cObject, вы можете объявить это с помощью свойства stdWrap (как показано в примерах):

1 = LOAD_REGISTER
1.param.cObject = TEXT
1.param.cObject.stdWrap.data = GP:the_id

Итак, в вашем случае должно понравиться:

elementCounter.cObject = TEXT
elementCounter.cObject.data = cObj:parentRecordNumber

Appending at the right place

Вы пытаетесь использовать append напрямую как свойство pageteasers (которое является копией styles.content.get, имеющего тип _ 6_.

CONTENT не имеет свойства append. Кроме того, вы должны поместить регистр перед всем содержимым, а не над отдельными элементами содержимого. = ›Он необходим как часть renderObj, поэтому визуализируется согласно CE.

renderObj для CONTENT имеет тип _ 9_, который также напрямую не имеет свойств stdWrap. Но у него есть свойство stdWrap с stdWrap -свойствами ...

Conclusion

Итак, вы можете получить этот фрагмент:

lib.content {
  pageteasers {   
    renderObj {
      stdWrap {
        append = LOAD_REGISTER
        append {
          elementCounter.cObject = TEXT
          elementCounter.cObject.data = cObj:parentRecordNumber
        }
      }
    }
  }
}
person Julian Hofmann    schedule 19.07.2021