DatabaseQueryProcessor

The DatabaseQueryProcessor fetches records from the database, using standard TypoScript select semantics. The result is then passed to the FLUIDTEMPLATE as an array.

This way a FLUIDTEMPLATE cObject can iterate over the array of records.

New in version 13.2

Options:

if

if
Type
if condition
Required
false
Default
''

Only if the condition is met the data processor is executed.

table

table
Type
string / stdWrap
Required
true
Default
''

Name of the table from which the records should be fetched.

as

as
Type
string / stdWrap
Required
false
Default
'records'

The variable's name to be used in the Fluid template.

dataProcessing

dataProcessing
Type
array of dataProcessing
Required
false
Default
[]

Array of data processors to be applied to all fetched records.

Example: Usage in combination with the RecordTransformationProcessor

New in version 13.2

Example usage for the data processor in conjunction with the RecordTransformationProcessor.

EXT:my_extension/Configuration/TypoScript/setup.typoscript
page = PAGE
page {
  10 = PAGEVIEW
  10 {
    paths.10 = EXT:my_extension/Resources/Private/Templates/
    dataProcessing {
      10 = database-query
      10 {
        as = categories
        table = sys_category
        select.where = parent=0
        dataProcessing.10 = record-transformation
      }
    }
  }
}
Copied!

For usage of the variables within Fluid see Example: Usage with FLUIDTEMPLATE.

Example: Display haiku records

Please see also About the examples.

TypoScript

We define the dataProcessing property to use the DatabaseQueryProcessor:

EXT:examples/Configuration/TypoScript/DataProcessors/Processors/DatabaseQueryProcessor.typoscript
tt_content {
    examples_dataprocdb =< lib.contentElement
    examples_dataprocdb {
        templateName = DataProcDb
        # Before TYPO3 v12.1 you have to specify the fully-qualified class name of the processor
        # dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
        # Since TYPO3 v12.1 one can also use the available alias
        dataProcessing.10 = database-query
        dataProcessing.10 {
            if.isTrue.field = pages
            table = tx_examples_haiku
            orderBy = title
            pidInList.field = pages
            as = myHaikus
            // recursively process the images in the records with the FilesProcessor
            dataProcessing {
                10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
                10 {
                    references.fieldName = image
                }
            }
        }
    }
}
Copied!

New in version 12.1

One can use the alias database-query instead of the fully-qualified class name \TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor.

The Fluid template

In the Fluid template then iterate over the records. As we used the recursive data processor FilesProcessor on the image records, we can also output the images.

EXT:examples/Resources/Private/Templates/ContentElements/DataProcDb.html
<html data-namespace-typo3-fluid="true" xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers">
   <h2>Data in variable myHaikus</h2>
   <f:debug inline="true">{myHaikus}</f:debug>

   <h2>Output</h2>
   <div class="row">
      <f:for each="{myHaikus}" as="haiku">
         <div class="col-12 col-md-3">
            <div class="card" style="backgorund-color: {haiku.color};">
               <f:if condition="{haiku.files.0}">
                  <f:image image="{haiku.files.0}" class="card-img-top" height="300"/>
               </f:if>
               <div class="card-body">
                  <h5 class="card-title">{haiku.data.title}</h5>
                  <div class="card-text"><f:format.html>{haiku.data.poem}</f:format.html></div>
               </div>
            </div>
         </div>
      </f:for>
   </div>

</html>
Copied!

Output

Each entry of the records array contains the data of the table in data and the data of the images in files.

Haiku record data dump and output

Haiku record data dump and output