AfterTransformTextForPersistenceEvent
New in version 13.3
The events BeforeTransformTextForPersistenceEvent,
AfterTransformTextForPersistenceEvent,
BeforeTransformTextForRichTextEditorEvent
AfterTransformTextForRichTextEditorEvent were introduced as
replacement for the removed hook
$GLOBALS
.
Modify data when saving rich-text-editor (RTE) content to the database (persistence). As opposed to BeforeTransformTextForPersistenceEvent this event is executed after TYPO3 applied any kind of internal transformations like for links.
When using a RTE HTML content element, two transformations take place within the TYPO3 backend:
- From database: Fetching the current content from the database (
persistence
) and preparing it to be displayed inside the RTE HTML component. - To database: Retrieving the data returned by the RTE and preparing it to be persisted into the database.
This event can modify the later part. This allows developers to apply more customized transformations, apart from the internal and API ones.
Event listeners can use $value = $event->get
to get the
current contents, apply changes to $value
and then store the
manipulated data via $event->set
,
see example:
Example: Transform a text before saving to database
An event listener class is constructed which will take a RTE input TYPO3 and internally store it in the database as [tag:typo3]. This could allow a content element data processor in the frontend to handle this part of the content with for example internal glossary operations.
The workflow would be:
- Editor enters "TYPO3" in the RTE instance.
- When saving, this gets stored as "[tag:typo3]".
- When the editor sees the RTE instance again, "[tag:typo3]" gets replaced to "TYPO3" again.
- So: The editor will always only see "TYPO3" and not know how it is internally handled.
- The frontend output receives "[tag:typo3]" and could do its own content element magic, other services accessing the database could also use the parseable representation.
The corresponding event listener class:
<?php
declare(strict_types=1);
namespace MyVendor\MyExtension\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Html\Event\AfterTransformTextForPersistenceEvent;
use TYPO3\CMS\Core\Html\Event\AfterTransformTextForRichTextEditorEvent;
class TransformListener
{
/**
* Transforms the current value the RTE delivered into a value that is stored (persisted) in the database.
*/
#[AsEventListener('rtehtmlparser/modify-data-for-persistence')]
public function modifyPersistence(AfterTransformTextForPersistenceEvent $event): void
{
$value = $event->getHtmlContent();
$value = str_replace('TYPO3', '[tag:typo3]', $value);
$event->setHtmlContent($value);
}
/**
* Transforms the current persisted value into something the RTE can display
*/
#[AsEventListener('rtehtmlparser/modify-data-for-richtexteditor')]
public function modifyRichTextEditor(AfterTransformTextForRichTextEditorEvent $event): void
{
$value = $event->getHtmlContent();
$value = str_replace('[tag:typo3]', 'TYPO3', $value);
$event->setHtmlContent($value);
}
}