问题描述
这与我的问题非常相似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_REGISTER
是 string/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 进行渲染。
CONTENT
的 renderObj 是 CASE
类型,它也没有直接的 stdWrap 属性。但它有一个带有 stdWrap-properties...
stdWrap
结论
所以,你可以得到这个片段:
lib.content {
pageteasers {
renderObj {
stdWrap {
append = LOAD_REGISTER
append {
elementCounter.cObject = TEXT
elementCounter.cObject.data = cObj:parentRecordNumber
}
}
}
}
}