Important
You are browsing documentation for version 6.0 of OroCommerce, supported until 2028. Read the documentation for the latest LTS version to get up-to-date information.
See our Release Process documentation for more information on the currently supported and upcoming releases.
Extending the Extended Field Rendering
To customize field rendering on the view page, use the oro.entity_extend_event.before_value_render event, which fires before a field’s value is rendered.
Example of an event listener registration:
oro_entity_extend.listener.extend_field_value_render:
class: Oro\Bundle\EntityExtendBundle\EventListener\ExtendFieldValueRenderListener
arguments:
- '@oro_entity_config.config_manager'
- '@router'
- '@oro_entity_extend.extend.field_type_helper'
- '@doctrine.orm.entity_manager'
tags:
- { name: kernel.event_listener, event: oro.entity_extend_event.before_value_render, method: beforeValueRender }
Each event listener decides how to display the field value. To change the field view value, it calls $event->setFieldViewValue($viewData);.
Example:
$underlyingFieldType = $this->fieldTypeHelper->getUnderlyingType($type);
if ($value && $underlyingFieldType == 'manyToOne') {
$viewData = $this->getValueForManyToOne(
$value,
$this->extendProvider->getConfigById($event->getFieldConfigId())
);
$event->setFieldViewValue($viewData);
}
In this code, we should:
check if the value is not null, and the field type is “manyToOne”.
calculate the field view value and set it by calling
$event->setFieldViewValue($viewData);
$viewData can be a simple string or an array, such as ['link' => 'example.com', 'title' => 'some text representation'].
A string is formatted automatically in a Twig template based on the field type.
An array renders the field with text equal to the escaped 'title' value. If the 'link' option exists, the field renders as a link with an href equal to the 'link' value.