RECORDS

This object is meant for displaying lists of records from a variety of tables. Contrary to the CONTENT object, it does not allow very fine selections of records (as it has no select property).

The register key SYS_LASTCHANGED is updated with the tstamp field of the records selected which has a higher value than the current.

Note

Records with parent ids (pid's) for non-accessible pages (that is hidden, timed or access-protected pages) are normally not selected. Pages may be of any type, except recycler. Disable the check with the dontCheckPid option.

Properties

source

source
Data type

records-list / stdWrap

List of record id's, optionally with prepended table names.

Example:

source = tt_content_34, 45, tt_links_56

categories

categories
Data type

categories-list / stdWrap

Comma-separated list of system categories uid's. Records related to these categories will be retrieved and made available for rendering.

Only records from the tables defined in the tables property will be retrieved.

Warning

If both source and categories properties are defined, the source property will take precedence, as it is considered more precisely targeted.

categories.relation

Name of the categories relation field to use for building the list of categorized records, as there can be several such fields on a given table.

tables

tables
Data type

list of tables / stdWrap

List of accepted tables. For items listed in the source property which are not prepended with a table name, the first table will be used.

Records from tables configured in conf are also allowed.

Example:

tables = tt_content, tt_address, tt_links
conf.tx_myexttable = TEXT
conf.tx_myexttable.value = Hello world

This adds the tables tt_content, tt_address, tt_links and tx_myexttable.

conf

conf.[*table name*]
Data type

cObject

Configuration array, which defines the rendering for records from table table name.

If this is not defined, the rendering of the records is done with the top-level object [table name] - just like when .renderObj is not set for the cObject CONTENT!

dontCheckPid

dontCheckPid
Data type

boolean / stdWrap

Default

0

Normally a record cannot be selected, if its parent page (pid) is not accessible for the website user. This option disables that check.

wrap

wrap
Data type

wrap / stdWrap

Wraps the output. Executed before stdWrap.

stdWrap

stdWrap
Data type

->stdWrap

Executed after wrap.

cache

cache
Data type

cache

See cache function description for details.

Examples

Selection with source

The following example would display some related content referenced from the page properties.

EXT:site_package/Configuration/TypoScript/setup.typoscript
page.42 = RECORDS
page.42 {
   source.field = tx_examples_related_content
   tables = tt_content
}

Since no conf property is defined, the rendering will look for a top-level TypoScript object bearing the name of the table to be rendered (e.g. tt_content).

Selection with source II

EXT:site_package/Configuration/TypoScript/setup.typoscript
    20 = RECORDS
    20 {
            source = 10,12
            dontCheckPid = 1
            tables = tt_content
    }

This example loads the content elements with the UIDs 10 and 12 no matter where these elements are located and whether these pages are accessible for the current user.

Selection with categories

If you want to display categorized content with a RECORDS object you could do it like this:

EXT:site_package/Configuration/TypoScript/setup.typoscript
    categorized_content = RECORDS
    categorized_content {
            categories.field = selected_categories
            categories.relation.field = category_field
            tables = tt_content
            conf.tt_content = TEXT
            conf.tt_content {
                    stdWrap.field = header
                    stdWrap.typolink.parameter = {field:pid}#{field:uid}
                    stdWrap.typolink.parameter.insertData = 1
                    stdWrap.wrap = <li>|</li>
            }
            wrap = <ul>|</ul>
    }

Contrary to the previous example, in this case the conf property is present and defines a very simple rendering of each content element (i.e. the header with a direct link to the content element).

However, the same can be achieved with a FLUIDTEMPLATE and data processing. This way templating is much more flexible. See the following example from the system extension fluid_styled_content:

EXT:site_package/Configuration/TypoScript/setup.typoscript
tt_content.menu_categorized_content =< lib.contentElement
tt_content.menu_categorized_content {
   templateName = MenuCategorizedContent
   dataProcessing {
      10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
      10 {
         table = tt_content
         selectFields = tt_content.*
         groupBy = uid
         pidInList.data = leveluid : 0
         recursive = 99
         join.data = field:selected_categories
         join.wrap = sys_category_record_mm ON uid = sys_category_record_mm.uid_foreign AND sys_category_record_mm.uid_local IN(|)
         where.data = field:category_field
         where.wrap = tablenames='tt_content' and fieldname='|'
         orderBy = tt_content.sorting
         as = content
      }
   }
}