---
title: "RECORDS"
manual: "TypoScript Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3tsref:cobj-records-introduction@main"
source: "ContentObjects/Records/Index.rst"
rendered: "2026-09-19T06:55:14+00:00"
---

# RECORDS {#cobj-records-introduction}

This object is meant for displaying lists of records from a variety of
tables. Contrary to the [CONTENT](https://docs.typo3.org/permalink/t3tsref:cobj-content@main) 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. Disable the check
> with the [dontCheckPid option](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-dontcheckpid@main).

-   [Properties](https://docs.typo3.org/permalink/t3tsref:properties@main)
-   [Examples](https://docs.typo3.org/permalink/t3tsref:examples@main)

## Properties {#cobj-records-details}

### source {#cobj-records-properties-source}

-   **source**

    -   *Type:* *records-list* / [stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)

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

    **Example:**

    ```typoscript
    source = tt_content_34, 45, tt_links_56
    ```

### categories {#cobj-records-properties-categories}

-   **categories**

    -   *Type:* *categories-list* / [stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)

    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](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-tables@main) 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 {#cobj-records-categories-relation}

-   **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 {#cobj-records-properties-tables}

-   **tables**

    -   *Type:* *list of tables* / [stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)

    List of accepted tables. For items listed in the
    [source](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-source@main) property
    which are not prepended with a table name, the first table
    will be used.

    Records from tables configured in [conf](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-conf@main)
    are also allowed.

    **Example:**

    ```typoscript
    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.\[*table name*\] {#cobj-records-properties-conf}

-   **conf.\[\*table name\*\]**

    -   *Type:* [cObject](https://docs.typo3.org/permalink/t3tsref:data-type-cobject@main)

    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](https://docs.typo3.org/permalink/t3tsref:cobj-content@main)!

### dontCheckPid {#cobj-records-properties-dontcheckpid}

-   **dontCheckPid**

    -   *Type:* [boolean](https://docs.typo3.org/permalink/t3tsref:data-type-boolean@main) / [stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)
    -   *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 {#cobj-records-properties-wrap}

-   **wrap**

    -   *Type:* [wrap](https://docs.typo3.org/permalink/t3tsref:data-type-wrap@main) / [stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)

    Wraps the output. Executed before [stdWrap](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-stdwrap@main).

### stdWrap {#cobj-records-properties-stdwrap}

-   **stdWrap**

    -   *Type:* [->stdWrap](https://docs.typo3.org/permalink/t3tsref:stdwrap@main)

    Executed after [wrap](https://docs.typo3.org/permalink/t3tsref:cobj-records-properties-wrap@main).

### cache {#cobj-records-properties-cache}

-   **cache**

    -   *Type:* [cache](https://docs.typo3.org/permalink/t3tsref:cache@main)

    See [cache function description](https://docs.typo3.org/permalink/t3tsref:cache@main) for details.

## Examples {#cobj-records-examples}

### Selection with source {#cobj-records-examples-source}

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

**EXT:site_package/Configuration/Sets/Main/setup.typoscript**

```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 {#cobj-records-examples-source-ii}

**EXT:site_package/Configuration/Sets/Main/setup.typoscript**

```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 {#cobj-records-examples-categories}

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

**EXT:site_package/Configuration/Sets/Main/setup.typoscript**

```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](https://docs.typo3.org/permalink/t3tsref:cobj-fluidtemplate@main) 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/Sets/Main/setup.typoscript**

```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
    }
  }
}

```
