问题描述
希望有人能简化以下TypoScript,以便将页面ID列表从模板常量传递到模板脚本。例如,我已经定义了TEASER_IDS = 6,7,9,12,4,并且TypeScript遍历该列表并将其依次用于select.pidInList,而不必在TypoScript中手动创建一个CONTENT对象每个ID。
lib.teaser = COA
lib.teaser {
10 = CONTENT
10 {
stdWrap.wrap = <div class="part">|</div>
table = tt_content
select.orderBy = sorting
select.pidInList = 6
select.where = colPos=1
select.languageField = sys_language_uid
}
20 = CONTENT
20 {
stdWrap.wrap = <div class="part">|</div>
table = tt_content
select.orderBy = sorting
select.pidInList = 7
select.where = colPos=1
select.languageField = sys_language_uid
}
}
page.50.30 < lib.teaser
这是TYPO3版本10.4.8
编辑:新版本,但我希望每个元素都被包裹起来,因此会导致
//this is what it should look like
<div class="header">CONTENT ID 6 colPos 1</div>
<div class="text">CONTENT ID 6 colPos 2</div>
<div class="header">CONTENT ID 7 colPos 1</div>
<div class="text">CONTENT ID 7 colPos 2</div>
<div class="header">CONTENT ID 4 colPos 1</div>
<div class="text">CONTENT ID 4 colPos 2</div>
TypoScript现在:
lib.teaser = COA
lib.teaser {
10 = CONTENT
10 {
stdWrap.wrap = <div class="header">|</div>
table = tt_content
select.orderBy = sorting
select.pidInList = 6,4
select.where = colPos=1
select.languageField = sys_language_uid
}
20 = CONTENT
20 {
stdWrap.wrap = <div class="text">|</div>
table = tt_content
select.orderBy = sorting
select.pidInList = 6,4
select.where = colPos=2
select.languageField = sys_language_uid
}
}
page.50.30 < lib.teaser
代码给了我,这是有道理的,但是我不知道如何更改代码,因此它给了我如新代码上面提到的首选输出
//this is not what i want
<div class="header">
CONTENT ID 6 colPos 1
CONTENT ID 7 colPos 1
CONTENT ID 4 colPos 1
</div>
<div class="text">
CONTENT ID 6 colPos 2
CONTENT ID 7 colPos 2
CONTENT ID 4 colPos 2
</div>
解决方法
请勿使用两个CONTENT对象,因为它们都会在所有匹配的CE上进行迭代。相反,如果colPos具有相应的值,则使用该选项覆盖换行。
stdWrap {
wrap = <div class="text">|</div>
override = <div class="header">|</div>
override.if {
value.field = colPos
equals = 1
}
}
(https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Functions/If.html#if)
,如果要循环浏览从不同列中收集内容的页面,则需要用排字法构建此结构。
您现在已经注意到,您从所有页面中获取列1的所有内容,然后从列2中获取所有内容。
您如何在页面ID上建立循环?我们没有for
打字错误循环,因为它是一种配置语言,也没有编程语言。
在ID的逗号分隔列表上进行拆分可能是可行的。
lib.teaser = TEXT
lib.teaser {
# list of page ids:
value = 6,7,9,12,4
split.token =,# only one kind of rendering (otherwise use optionsplit to define cases)
cObjNum = 1
# example: 1 = first,4 = last,between: 2,3 alternating
# cObjNum = 1 |*| 2 || 3 |*| 4
# cases of rendering:
1 = COA
1 {
10 = CONTENT
10 {
stdWrap.wrap = <div class="part">|</div>
table = tt_content
select.orderBy = sorting
# use current value of split:
select.pidInList.current = 1
select.where = colPos=1
select.languageField = sys_language_uid
}
20 = CONTENT
20 {
stdWrap.wrap = <div class="part">|</div>
table = tt_content
select.orderBy = sorting
select.pidInList.current = 1
select.where = colPos=1
select.languageField = sys_language_uid
}
}
}