TYPO3 DataProcessing: Как контролировать порядок вывода? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть список с идентификаторами контента из маски пользовательского элемента контента. Редактор может выбрать некоторые элементы содержимого из списка. А теперь я хочу получить полные данные из этих элементов содержимого. Поэтому я попробовал DatabaseQueryProcessor.

Я впервые пытаюсь обработать данные.

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

Это почти работает, но порядок вывода жидкости не совпадает с порядком исходного списка. Как я могу форсировать тот же порядок для выхода жидкости, как в исходном списке?

Или мне сначала нужно пройти через SplitProcessor? Этот 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
          }
       }
    }        
}

Поле сортировки не то, что я хочу. Я хочу такую ​​же сортировку, как выбрал редактор.

Как я могу решить это?

1 Ответ

0 голосов
/ 03 июня 2019

Согласно https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html#dataprocessing

  # All properties from .select can be used directly
  # + stdWrap
  colPos = 1
  pidInList = 13,14

и проверка выбранных свойств https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Functions/Select.html дает вам

  uidInList =
  pidInList =
  recursive =
  orderBy =
  groupBy =
  max =
  begin =
  where =
  languageField =
  includeRecordsWithoutDefaultTranslation =
  selectFields =
  join =
  leftjoin =
  rightjoin =

Таким образом, вместо использования здесь вложенного dataProcessing, вы можете пропустить orderBy и перейти к uidInList.

  uidInList.field = tx_mask_sectionmenu_contentitems

Если вы хотите остаться с вложенным подходом, вам все равно следует использовать 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
          }
       }
    }        
}

Чтобы получить фактическое имя поля для «current», вы можете поместить <f:debug>{items}</f:debug> в свой шаблон Fluid. Возможно, вместо этого должно быть data = current, если в этом контексте доступно действительное поведение current.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...