如何控制记录的输出顺序

时间:2019-10-21 15:04:16

标签: typo3 typoscript typo3-9.x

我有一个MASK内容元素,编辑者可以在其中选择一些记录作为预告片(请参见下面的屏幕截图)。内容应按照编辑器选择的顺序输出。例如,UID列表将如下所示:19,18,20,17

我认为,在MySQL语法中,函数SELECT FIND_IN_SET()可以完成这项工作-如何在印刷内容CONTENT对象的select部分中使用它(或类似的功能)?

在此先感谢您的帮助。

Screenshot

编辑:我的代码示例-orderBy子句和where子句都不起作用

table = tt_content
select {
   pidInList = 11,12
   uidInList.data = field:recid  // the list with the wanted record IDs (19,18,20,17) transferred from the content object
   recursive = 2
   join = sys_category_record_mm ON sys_category_record_mm.uid_foreign = tt_content.uid

   orderBy.data = field:recid 
   orderBy.wrap = FIND_IN_SET(`tt_content`.`uid`,'|')

   where = tt_content.CType='mask_cnt_textpic_uni'

   #where.data = field:recid
   #where.wrap = FIND_IN_SET(`tt_content`.`uid`,'|')

   where.data = field:syscats
   where.intval = 1
   where.wrap = sys_category_record_mm.uid_local IN (|)

   max = 999
}

2 个答案:

答案 0 :(得分:0)

这就是你想要的吗?

colPos的内容示例:

lib.content.left = CONTENT
lib.content.left {
    table = tt_content
    select {
        orderBy = sorting
        where = {#colPos}=1
    }
}

这里的关键是select.orderBy

答案 1 :(得分:0)

感谢HerrZ的说明,我找到了解决方案-这是我的自定义脚本:

10 = CONTENT
10 {
    table = tt_content
    select {
        pidInList = 11,12
        uidInList.data = field:recid
        recursive = 2
        selectFields.dataWrap = *,FIND_IN_SET(`uid`,'{field:recid}') AS reclist_sortby
        join = sys_category_record_mm ON sys_category_record_mm.uid_foreign = tt_content.uid
        where = tt_content.CType='mask_cnt_textpic_uni'
        where.data = field:syscats
        where.intval = 1
        where.wrap = sys_category_record_mm.uid_local IN (|)
        orderBy = reclist_sortby
    }

    renderObj = COA
    renderObj { ... }

}

重要说明:在FIND_IN_SET语法中,必须如示例中所示对参数加引号-否则Typo3会引发错误(“对本机函数'FIND_IN_SET的调用中的参数计数不正确” )。