首页 > 解决方案 > 将变量传递给包含 tx_news 插件的内容对象

问题描述

这与我的问题Counter for mask elements in a TYPO3 column非常相似

我需要将一个变量(在我的情况下,其值是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 另一个尝试是使用 Good Old Register

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

标签: typo3typoscriptfluidtx-newstypo3-10.x

解决方案


您通过注册的尝试可能会奏效。但你必须关心,你在哪里做什么......

寄存器

LOAD_REGISTERstring/stdWrap类型,而不是每个定义的cObject 。如果您想使用基于 cObject 的内容您可以通过stdWrap -property 声明它(如示例中所示):

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

所以,在你的情况下,它应该像:

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

在正确的位置添加

您正在尝试将append直接用作pageteasers(其styles.content.get类型为CONTENT.

CONTENT没有append属性。此外,您会将寄存器放在整个内容的前面,而不是单个内容元素的前面。=> 它需要作为renderObj的一部分,因此它是按 CE 呈现的。

renderObjCONTENTtype CASE,它也没有直接的stdWrap -properties。但它有一个stdWrap带有stdWrap -properties 的属性...

结论

所以,你可以得到这个片段:

lib.content {
  pageteasers {   
    renderObj {
      stdWrap {
        append = LOAD_REGISTER
        append {
          elementCounter.cObject = TEXT
          elementCounter.cObject.data = cObj:parentRecordNumber
        }
      }
    }
  }
}

推荐阅读