Feature: #108868 - Introduce Fluid f:render.text ViewHelper
See forge#108868
Description
A new
<f: ViewHelper has been added. It provides a consistent
approach for outputting field values in templates where the field is part of a record.
The ViewHelper follows the same conventions as other rendering-related ViewHelpers and can be used wherever a text-based database field should be displayed in the frontend.
The ViewHelper is record-aware: it receives the full record and the field name, and renders the field according to the field's TCA configuration. This includes handling of both plain text and rich text fields.
The input can be a
\TYPO3\,
\TYPO3\, or
\TYPO3\.
This allows to input a Record, a ContentBlockData object, a PageInformation object, or an Extbase Model. PageInformation and Extbase Models are internally converted to a RecordInterface.
Usage
Usage with the record- data processor:
dataProcessing {
10 = record-transformation
}
Based on the field's TCA configuration from the provided record, the ViewHelper chooses the appropriate processing of the field (plain text, multiline text or rich text) without further configuration in the template.
<f:render.text record="{record}" field="title" />
or
<f:render.text field="title">{record}</f:render.text>
or
{f:render.text(record: record, field: 'title')}
or
{record -> f:render.text(field: 'title')}
Usage with an Extbase model (property name differs from database field name):
The
field argument always refers to the database/TCA column name of the
underlying record, even if your Extbase model maps that column to a differently
named property.
Note that Extbase models need to contain all columns that should be rendered
and the record type column (if configured in TCA) for this to work correctly.
For example, an Extbase model that represents tt_ must map both bodytext
and ctype to be able to use
<f:.
<f:render.text record="{post}" field="short_description" />
<!-- Example: Post->shortDescription maps to DB field "short_description"; use field="short_description" here. -->
Previously, you needed to choose different processing for plain text and rich text fields; you can now use the same ViewHelper for all types of fields.
For reference, similar results could previously be achieved using:
{record.title}
or multiline text:
<f:format.nl2br>{record.description}</f:format.nl2br>
or
{record.description -> f:format.nl2br()}
or, for rich text:
<f:format.html>{record.bodytext}</f:format.html>
or
{record.bodytext -> f:format.html()}
Migration
Extensions that previously accessed field values directly via
{record.
can continue to do so. However, using
<f: is recommended because
it renders the field in the context of the record and applies processing based on the
field configuration.
When migrating from formatting ViewHelpers like
<f: or
<f: to
<f:, the main difference is that the
new ViewHelper is aware of the record it belongs to and renders the field based on
the record's TCA schema.
Impact
Theme creators are encouraged to use the
<f: ViewHelper for
rendering text-based fields (plain and rich text), as it provides a standardized,
record-aware approach that can be built upon in future versions.
Since the ViewHelper takes both the record and the field name as arguments, the rendering process has access to the complete record context. This makes the ViewHelper more flexible compared to directly accessing the field value.