TYPO3数据处理:如何控制输出的顺序?

TYPO3数据处理:如何控制输出的顺序?,typo3,typoscript,Typo3,Typoscript,我有一个列表,其中包含来自掩码自定义内容元素的内容UID。编辑器可以从列表中选择一些内容元素。现在我需要这些内容元素UID的完整数据。所以我尝试了DatabaseQueryProcessor 我第一次尝试数据处理 dataProcessing { 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor 10 { table = tt_content uidInL

我有一个列表,其中包含来自掩码自定义内容元素的内容UID。编辑器可以从列表中选择一些内容元素。现在我需要这些内容元素UID的完整数据。所以我尝试了DatabaseQueryProcessor

我第一次尝试数据处理

dataProcessing {
    10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
    10 {
        table = tt_content          
        uidInList.field = tx_mask_sectionmenu_contentitems    
        as = items
    }
}
这几乎可以工作,但流体输出的顺序与原始列表的顺序不匹配。如何强制流体输出的顺序与原始列表中的顺序相同

还是我必须先检查一下处理器? 到目前为止,这个SplitProcessor还可以工作,但我不知道在下一个DatabaseQueryProcessor中指定什么

dataProcessing {

    10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
    10 {
        if.isTrue.field = tx_mask_sectionmenu_contentitems
        delimiter = ,
        fieldName = tx_mask_sectionmenu_contentitems
        removeEmptyEntries = 1
        filterIntegers = 0
        filterUnique = 1
        as = items

        dataProcessing {
          10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
          10 {
            table = tt_content                          
            ???
            as = contentItem
          }
       }
    }        
}
排序字段不是我想要的。我想要与编辑器选择的排序相同的排序

如何解决此问题?

根据

检查select属性将为您提供

  uidInList =
  pidInList =
  recursive =
  orderBy =
  groupBy =
  max =
  begin =
  where =
  languageField =
  includeRecordsWithoutDefaultTranslation =
  selectFields =
  join =
  leftjoin =
  rightjoin =
因此,与其在这里使用嵌套数据处理,不如跳过orderBy,转而使用uidInList

如果您想继续使用嵌套方法,那么仍然应该使用uidInList,但略有不同

dataProcessing {
    10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
    10 {
        if.isTrue.field = tx_mask_sectionmenu_contentitems
        delimiter = ,
        fieldName = tx_mask_sectionmenu_contentitems
        removeEmptyEntries = 1
        filterIntegers = 0
        filterUnique = 1
        as = items

        dataProcessing {
          10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
          10 {
            table = tt_content                          
            uidInList.field = current
            as = contentItem
          }
       }
    }        
}
要获取当前的实际字段名,您可能需要将{items}放入流体模板中。如果当前的实际行为在此上下文中可用,那么它可能必须是data=current。

我测试了uidInList.field=tx\u mask\u sectionmenu\u contentitems,但这无助于按照逗号分隔的uid列表的顺序对记录进行排序


嵌套方法根本不起作用。我查看了代码,发现只有DatabaseQueryProcessor、LanguageMenuProcessor和MenuProcessor能够使用另一个MenuProcessor处理内容。

谢谢您的回答!我首先尝试了这个,请参见我的第一个代码示例。我只得到内容元素的UID。当然,我可以在UID上循环流体,例如VHS,以获取元素的内容。但是我想在之前做,而不是在流体中。如果这不起作用,我可能必须找到另一个解决方案,或者我尝试一个更复杂的流体解决方案。我刚刚添加了完整的数据处理块-如果你刚刚得到UID,你的设置一定有问题,由于查询处理器应该返回完整的tt_内容记录,在旧的TYPO3时代,一个肮脏的解决方法是orderBy.dataWrap=FIND_in_SET{field:myField},但我认为这在幕后的条令下是行不通的。你是对的。第一个代码片段为我提供了完整的tt_内容记录,但具有不需要的排序顺序。这就是为什么我认为在两个处理器之间拆分处理器会有所帮助的原因:-。我已经尝试了太多,我不记得是什么:-。我的问题和卢卡斯用TYPO3 9.5和uidInList方法描述的完全一样。字段中的顺序正确。但是输出顺序错误,并且与be中选择的不一样。
  uidInList.field = tx_mask_sectionmenu_contentitems
dataProcessing {
    10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
    10 {
        if.isTrue.field = tx_mask_sectionmenu_contentitems
        delimiter = ,
        fieldName = tx_mask_sectionmenu_contentitems
        removeEmptyEntries = 1
        filterIntegers = 0
        filterUnique = 1
        as = items

        dataProcessing {
          10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
          10 {
            table = tt_content                          
            uidInList.field = current
            as = contentItem
          }
       }
    }        
}