---
title: "Feature: #104974 - Content area related information in the frontend"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-104974-1726401724"
source: "Changelog/14.2/Feature-104974-ContentAreaRelatedInformationInTheFrontend.rst"
typo3-version: "14.2"
typo3-major: 14
type: "feature"
issue: 104974
forge: "https://forge.typo3.org/issues/104974"
tags: ["Frontend", "ext:frontend"]
rendered: "2026-10-01T16:39:42+00:00"
---

# Feature: #104974 - Content area related information in the frontend {#feature-104974-1726401724}

See [forge#104974](https://forge.typo3.org/issues/104974)

## Description {#description}

[Feature: #103504 - New ContentObject PAGEVIEW](https://docs.typo3.org/permalink/changelog:feature-103504-1712041725) introduced the `PAGEVIEW` cObject
for frontend rendering. It is a powerful alternative to
the `FLUIDTEMPLATE` cObject, allowing a full page to be rendered with
less configuration.

`PAGEVIEW` has now been extended and provides all
content elements related to a page, grouped by their columns
as defined in the page layout. The elements are provided as fully resolved
`Record` objects (see [Feature: #103783 - RecordTransformation Data Processor](https://docs.typo3.org/permalink/changelog:feature-103783-1715113274) and
[Feature: #103581 - Automatically transform TCA field values for record objects](https://docs.typo3.org/permalink/changelog:feature-103581-1723209131)).

The content elements are attached to the new
`\TYPO3\CMS\Core\Page\ContentArea` object, which also contains all
column-related information and configuration.
This is useful for frontend rendering because an
element may need to know its rendering context. Knowing
this information, an element can, for example, decide not to render the
`Header` partial if it is in a sidebar content area.

`\TYPO3\CMS\Core\Page\ContentArea` objects are added to the
view either by variable name defined in `contentAs` or,
if not defined, `content`. Content elements can then be accessed via the
`records` property.

`\TYPO3\CMS\Core\Page\ContentArea` objects contain
backend layout-related configuration, such as
[content restrictions](https://docs.typo3.org/permalink/changelog:feature-108623-1768315053). These allow
further validation such as whether a content type is
valid.

Therefore `{content.main.records}` can be used to get content
elements from the `main` content area. `main` is the identifier as defined in
the page layout, and `content` is the default variable name.

> [!IMPORTANT]
> `\TYPO3\CMS\Core\Page\ContentArea` objects are attached in
> the `\TYPO3\CMS\Core\Page\ContentAreaCollection`, which
> implements the PSR-11 `\Psr\Container\ContainerInterface` to allow
> access to the content areas using `get()`. To optimize performance
> `\TYPO3\CMS\Core\Page\ContentArea` objects are
> instantiated only when accessed (lazy loading).

Accessing a `\TYPO3\CMS\Core\Page\ContentArea` using
`{content.main}` makes the following information available, as defined in
the page layout:

-   `identifier` \- The column identifier
-   `colPos` \- The defined `colPos`
-   `name` \- The descriptive `name`, which might be a locallang key
-   `allowedContentTypes` \- The defined `allowedContentTypes`
-   `disallowedContentTypes` \- The defined `disallowedContentTypes`
-   `slideMode` \- The defined `ContentSlideMode`, which defaults to
    `ContentSlideMode::None`
-   `configuration` \- The complete content area-related configuration
-   `records` \- The content elements as `Record` objects

The following example renders the content elements of a page which has only
a single column:

```typoscript
mod.web_layout.BackendLayouts {
  default {
    title = Default
    config {
      backend_layout {
        colCount = 1
        rowCount = 1
        rows {
          1 {
            columns {
              1 {
                name = Main Content Area
                colPos = 0
                identifier = main
              }
            }
          }
        }
      }
    }
  }
}
```

```typoscript
page = PAGE
page.10 = PAGEVIEW
page.10.paths.10 = EXT:my_site_package/Resources/Private/Templates/
```

```html
<f:for each="{content.main.records}" as="record">
    <f:render partial="ContentElement"
              arguments="{record: record, area: content.main}" />
</f:for>
```

The introduction of the new
[f:render.contentArea](https://docs.typo3.org/permalink/changelog:feature-108726-1769071158) and
[f:render.record](https://docs.typo3.org/permalink/changelog:feature-108726-1769503907) ViewHelpers means that manually
iterating over content elements is no longer necessary. All the content elements
in a content area can be rendered with a single ViewHelper call:

```html
<!-- Tag syntax -->
<f:render.contentArea contentArea="{content.main}" />

<!-- Inline syntax -->
{content.main -> f:render.contentArea()}
```

To render a single record, use the `f:render.record` ViewHelper:

```html
<!-- Tag syntax -->
<f:render.record record="{content.main.records.0}" />

<!-- Inline syntax -->
{content.main.records.0 -> f:render.record()}
```

> [!NOTE]
> `\TYPO3\CMS\Core\Page\ContentArea` helps the
> `\TYPO3\CMS\Frontend\Event\AfterContentHasBeenFetchedEvent`
> to manipulate content elements in an area by
> providing context.

## Impact {#impact}

It is now possible to access all the content elements on a page, grouped by their
column, as well as having all the column-related information and
configuration available. In addition to reduced configuration effort,
different rendering is possible for an element depending on context.

## Example {#example}

A content element template using a `Default` layout that renders the
`Header` partial only if the content element is not in the `sidebar` column.

```html
<f:layout name="Default" />

<f:section name="Main">
    <f:if condition="{area.identifier} != 'sidebar'">
        <f:render partial="Header" arguments="{_all}" />
    </f:if>

    <p>{record.text}</p>
    <f:image image="{record.image}" width="{area.configuration.imageWidth}" />
</f:section>
```
