---
title: "Child records of the core"
manual: "Headliner"
version: "main"
permalink: "https://docs.typo3.org/permalink/twtgroup/headliner:integration-core-records@main"
source: "Integration/CoreRecords/Index.rst"
rendered: "2026-11-11T13:53:21+00:00"
---

# Child records of the core {#integration-core-records}

The marks of the records and everything the page module does with them do not depend on Content Blocks. A content element
with child records (inline, IRRE) made with the means of the core works the same way. This is the minimum:

**Configuration/TCA/Overrides/tt_content.php**

```php
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

// the field with the records, and a content element type that shows it
$GLOBALS['TCA']['tt_content']['columns']['myext_items'] = [
    'label' => 'Teasers',
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_myext_item',
        'foreign_field' => 'parent',
    ],
];
ExtensionManagementUtility::addTcaSelectItem('tt_content', 'CType', [
    'label' => 'Teaser list',
    'value' => 'myext_teaser',
    'group' => 'default',
]);
$GLOBALS['TCA']['tt_content']['types']['myext_teaser'] = [
    'showitem' => '--palette--;;general, --palette--;;headers, myext_items, --palette--;;hidden',
];
```

**Configuration/TCA/tx_myext_item.php**

```php
return [
    'ctrl' => ['title' => 'Teaser', 'label' => 'title', 'delete' => 'deleted', 'sortby' => 'sorting'],
    'columns' => [
        'parent' => ['config' => ['type' => 'number']],
        'title' => ['config' => ['type' => 'input']],
        // the tag of the heading: a select with tags and nothing else
        'tag' => ['config' => ['type' => 'select', 'renderType' => 'selectSingle', 'default' => 'h3', 'items' => [
            ['label' => 'H2', 'value' => 'h2'],
            ['label' => 'H3', 'value' => 'h3'],
            ['label' => 'H4', 'value' => 'h4'],
        ]]],
        'text' => ['config' => ['type' => 'text', 'enableRichtext' => true]],
    ],
    'types' => ['1' => ['showitem' => 'title, tag, text']],
];
```

**Resources/Private/Templates/Teaser.html**

```html
<f:layout name="Default" />
<f:section name="Main">
    <f:for each="{record.myext_items}" as="item">
        <article>
            <headliner:headline record="{item}">{item -> f:render.text(field: 'title')}</headliner:headline>
            {item -> f:render.text(field: 'text')}
        </article>
    </f:for>
</f:section>
```

-   In a template of `fluid_styled_content` the content element is `{data}` (an array) and, with the records of its fields
    resolved, `{record}`. `{record.myext_items}` are the child records as record objects, which is what
    `headliner:headline` wants. The layout renders the header of the element, so it needs no `headliner:headline` of its
    own for that.
-   The rules are the same as for Content Blocks (see [Content Blocks](https://docs.typo3.org/permalink/twtgroup/headliner:integration-content-blocks@main)): the tag field must be a select of tags and nothing else, the
    page module finds the rich text of a heading in the text of its record, and the badge is the title of the table
    (`ctrl.title`, here **Teaser**).
-   The tag of a record is saved in its own table with the rights of the backend user for it, so the editor needs to be
    allowed to modify `tx_myext_item`.
