Markets List and Detail Plugin
This commit is contained in:
1 parent
a739dd8fe3
commit
27cc22dc69
66 files changed
+1078
-5494
No files matched your search
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Evomedien\Vitec\Service;
|
||||
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
|
||||
/**
|
||||
* Turns raw richtext (RTE) database content into frontend-ready HTML.
|
||||
*
|
||||
* TYPO3 stores RTE fields with unresolved internal references: internal links as
|
||||
* `<a href="t3://page?uid=12">`, legacy content as `<link>` tags, images with
|
||||
* relative paths. Fluid resolves those through `parseFunc` when it renders; a
|
||||
* headless UserFunc renderer that hands the raw column straight to JSON does
|
||||
* not, and the frontend receives dead links.
|
||||
*
|
||||
* The two upstream packages already close this gap for the output they own:
|
||||
* `friendsoftypo3/headless` applies `parseFunc =< lib.parseFunc_RTE` to the core
|
||||
* text elements via TypoScript, and `nb-headless-content-blocks` calls
|
||||
* `parseFunc($value, null, '< lib.parseFunc_RTE')` for every Content Block field
|
||||
* whose TCA has `enableRichtext`. This class closes it for the VITEC UserFunc
|
||||
* renderers, using exactly the same call.
|
||||
*
|
||||
* Static by design: the conversion is stateless, and the call sites are payload
|
||||
* array literals where a `GeneralUtility::makeInstance(...)->` prefix would add
|
||||
* only noise. Same rationale as `CropVariants::firstImage()` and
|
||||
* `FormDefinitions::get()`.
|
||||
*
|
||||
* Fail-soft per architecture spec clause 9.5: when parsing is impossible — most
|
||||
* notably outside a frontend request, where no TypoScript setup exists — the raw
|
||||
* value is returned. Content is never lost; at worst it stays unresolved.
|
||||
*/
|
||||
final class RteResolver
|
||||
{
|
||||
/**
|
||||
* @param mixed $value raw column value; null and non-strings are tolerated
|
||||
*/
|
||||
public static function html(mixed $value): string
|
||||
{
|
||||
$raw = (string)($value ?? '');
|
||||
if (trim($raw) === '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
try {
|
||||
$parsed = GeneralUtility::makeInstance(ContentObjectRenderer::class)
|
||||
->parseFunc($raw, null, '< lib.parseFunc_RTE');
|
||||
|
||||
return $parsed !== '' ? $parsed : $raw;
|
||||
} catch (\Throwable $e) {
|
||||
return $raw;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user