TYPO3:如何显示来自不同页面的内容元素

问题描述

希望有人能简化以下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
        }
    }
}