Благодаря комментарию от nstungcom я нашел хорошие образцы в расширении media2click и смог изменить тег iFrame с его фрагментами. Поскольку я не являюсь разработчиком расширений, это решение следует использовать с осторожностью , пока разработчик не подтвердит его. Приветствуются предложения по улучшению.
Я внес следующие изменения / дополнения в свой пакет sitepackage (расширение «user_site»):
/ ext / user_site / Classes / Resource / Rendering / YouTubeRenderer. php
<?php
namespace MyVendorName\UserSite\Resource\Rendering;
use TYPO3\CMS\Core\Core\Environment;
use TYPO3\CMS\Core\Resource\FileInterface;
use TYPO3\CMS\Core\Resource\FileReference;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
class YouTubeRenderer extends \TYPO3\CMS\Core\Resource\Rendering\YouTubeRenderer
{
public function getPriority()
{
return 25;
}
public function render(FileInterface $file, $width, $height, array $options = [], $usedPathsRelativeToCurrentScript = false)
{
$options = $this->collectOptions($options, $file);
$iframe = str_replace(' src="', ' src="" data-name="youtube" data-src="', parent::render($file, $width, $height, $options, $usedPathsRelativeToCurrentScript));
return $iframe;
}
}
Я не уверен, действительно ли необходимы все эти операторы use и функция getPriority.
/ ext / user_site / ext_localconf . php
<?php
defined('TYPO3_MODE') or die();
call_user_func(function () {
$rendererRegistry = \TYPO3\CMS\Core\Resource\Rendering\RendererRegistry::getInstance();
$rendererRegistry->registerRendererClass(\MyVendorName\UserSite\Resource\Rendering\YouTubeRenderer::class);
});
Не знаю, это так называемый XCLASS. Синтаксис отличается от того, что я нашел в качестве примера в Api .
/ ext / user_site / ext_emconf. php
<?php
$EM_CONF[$_EXTKEY] = [
'title' => 'Project specific configuration and templates',
// [...]
'autoload' => [
'psr-4' => [
'MyVendorName\\UserSite\\' => 'Classes',
],
],
];
По-видимому, ему нужна была эта автозагрузка, что бы там ни было.