将变量传递给包含 tx_news 插件的内容对象

问题描述

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

我需要将一个变量(在我的例子中是 import pandas as pd from glob import glob files = glob(r'C:/Users/jj/Desktop/Bulk_Wav/*.csv') for filename in files: df = pd.read_csv(filename,sep='\t') df.drop(['maybe','ofcourse'],axis=1,inplace=True) df.to_csv(filename,sep='\t',index=False) 的值,它是列中当前项目的计数器)到模板。

在主页模板中:

cObj:parentRecordNumber

在打字稿中:

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

然后在渲染的 CE 模板中 (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 } } )

News/List.html

我没能在这里看到上述变量。将变量从 TS 传递到新闻流体模板的正确方法是什么?


PS 另一种尝试是使用 Good Old Register

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

在模板中:

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')}

解决方法

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

注册

根据定义,

LOAD_REGISTERstring/stdWrap 类型,不是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

在正确的位置追加

您正试图将 append 直接用作 pageteasers 的属性(它是 CONTENT 类型的 styles.content.get 的副本。

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

CONTENTrenderObjCASE 类型,它也没有直接的 stdWrap 属性。但它有一个带有 stdWrap-properties...

的属性 stdWrap

结论

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

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