TYPO3 Logo
TYPO3 Core Changelog
Options
Give feedback View source How to edit Edit on GitHub Full documentation (single file)

TYPO3 Core Changelog

  • ChangeLog v15
    • 15.0 Changes
    • 15.x Changes by type
  • ChangeLog v14
    • 14.3.x Changes
    • 14.3 Changes
    • 14.2 Changes
    • 14.1 Changes
    • 14.0 Changes
    • 14.x Changes by type
  • ChangeLog v13
    • 13.4.x Changes
    • 13.4 Changes
    • 13.3 Changes
    • 13.2 Changes
    • 13.1 Changes
    • 13.0 Changes
    • 13.x Changes by type
  • ChangeLog v12
    • 12.4.x Changes
    • 12.4 Changes
    • 12.3 Changes
    • 12.2 Changes
    • 12.1 Changes
    • 12.0 Changes
    • 12.x Changes by type
  • ChangeLog v11
    • 11.5.x Changes
    • 11.5 Changes
    • 11.4 Changes
    • 11.3 Changes
    • 11.2 Changes
    • 11.1 Changes
    • 11.0 Changes
    • 11.x Changes by type
  • ChangeLog v10
    • 10.4.x Changes
    • 10.4 Changes
    • 10.3 Changes
    • 10.2 Changes
    • 10.1 Changes
    • 10.0 Changes
    • 10.x Changes by type
  • ChangeLog v9
    • 9.5.x Changes
    • 9.5 Changes
    • 9.4 Changes
    • 9.3 Changes
    • 9.2 Changes
    • 9.1 Changes
    • 9.0 Changes
    • 9.x Changes by type
  • ChangeLog v8
    • 8.7.x Changes
    • 8.7 Changes
    • 8.6 Changes
    • 8.5 Changes
    • 8.4 Changes
    • 8.3 Changes
    • 8.2 Changes
    • 8.1 Changes
    • 8.0 Changes
    • 8.x Changes by type
  • ChangeLog v7
    • 7.6.x Changes
    • 7.6 Changes
    • 7.5 Changes
    • 7.4 Changes
    • 7.3 Changes
    • 7.2 Changes
    • 7.1 Changes
    • 7.0 Changes
    • 7.x Changes by type
  • Documenting Changes
  • Sitemap
  1. TYPO3 Core Changelog
  2. ChangeLog v14
  3. 14.2 Changes
  4. Feature: #104974 - Content area related information in the frontend
Give feedback Edit on GitHub

Feature: #104974 - Content area related information in the frontend 

See forge#104974

Description 

Feature: #103504 - New ContentObject PAGEVIEW 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 and Feature: #103581 - Automatically transform TCA field values for record objects).

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.

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.

ContentArea objects contain backend layout-related configuration, such as content restrictions. 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

ContentArea objects are attached in the ContentAreaCollection , which implements the PSR-11 \Psr\Container\ContainerInterface to allow access to the content areas using get(). To optimize performance ContentArea objects are instantiated only when accessed (lazy loading).

Accessing a 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:

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
              }
            }
          }
        }
      }
    }
  }
}
Copied!
page = PAGE
page.10 = PAGEVIEW
page.10.paths.10 = EXT:my_site_package/Resources/Private/Templates/
Copied!
<f:for each="{content.main.records}" as="record">
    <f:render partial="ContentElement"
              arguments="{record: record, area: content.main}" />
</f:for>
Copied!

The introduction of the new f:render.contentArea and f:render.record 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:

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

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

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

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

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

Note

ContentArea helps the AfterContentHasBeenFetchedEvent to manipulate content elements in an area by providing context.

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 

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

<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>
Copied!
  • Previous
  • Next
Reference to the headline

Copy and freely share the link

This link target has no permanent anchor assigned. You can make a pull request on GitHub to suggest an anchor. The link below can be used, but is prone to change if the page gets moved.

Copy this link into your TYPO3 manual.

  • Home
  • Contact
  • Issues
  • Repository

Last rendered: May 07, 2026 15:19

© since 1997 by the TYPO3 contributors
  • Legal Notice
  • Privacy Policy