如何在 TYPO3 的 YouTube iframe 标签中用 data-src 替换 src?
How to replace src with data-src in TYPO3's YouTube iframe tag?
为了使用“Klaro! Consent Manager”,我需要稍微修改 iframe 标签,当您嵌入带有文本媒体元素的 YouTube 视频时,它会由 TYPO3 自动生成。
生成于/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php
public function render(FileInterface $file, $width, $height, array $options = [], $usedPathsRelativeToCurrentScript = false)
{
$options = $this->collectOptions($options, $file);
$src = $this->createYouTubeUrl($options, $file);
$attributes = $this->collectIframeAttributes($width, $height, $options);
return sprintf(
'<iframe src="%s"%s></iframe>',
htmlspecialchars($src, ENT_QUOTES | ENT_HTML5),
empty($attributes) ? '' : ' ' . $this->implodeAttributes($attributes)
);
}
我已经有一个 user_site 扩展来配置系统和编辑模板,但没有任何 php 类。看来我不能只在这里覆盖流体模板。我是集成商,不是扩展开发人员,我想知道如何相应地覆盖或扩展此功能,而不更改或复制太多核心功能。
如何将 <iframe src=
替换为 <iframe data-name="youtube" data-src=
?
感谢 nstungcom 的评论,我在扩展 media2click 中找到了很好的示例,并且能够使用它的片段修改 iFrame 标记。由于我不是扩展开发人员,在开发人员确认之前,应谨慎使用此解决方案。非常感谢改进建议。
我对我的网站包(“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);
});
我不知道这是否是一个 so-called XCLASS。语法看起来与我在 Api.
中找到的示例不同
/ext/user_site/ext_emconf.php
<?php
$EM_CONF[$_EXTKEY] = [
'title' => 'Project specific configuration and templates',
// [...]
'autoload' => [
'psr-4' => [
'MyVendorName\UserSite\' => 'Classes',
],
],
];
显然它需要这个自动加载,不管它是干什么用的。
为了使用“Klaro! Consent Manager”,我需要稍微修改 iframe 标签,当您嵌入带有文本媒体元素的 YouTube 视频时,它会由 TYPO3 自动生成。
生成于/typo3/sysext/core/Classes/Resource/Rendering/YouTubeRenderer.php
public function render(FileInterface $file, $width, $height, array $options = [], $usedPathsRelativeToCurrentScript = false)
{
$options = $this->collectOptions($options, $file);
$src = $this->createYouTubeUrl($options, $file);
$attributes = $this->collectIframeAttributes($width, $height, $options);
return sprintf(
'<iframe src="%s"%s></iframe>',
htmlspecialchars($src, ENT_QUOTES | ENT_HTML5),
empty($attributes) ? '' : ' ' . $this->implodeAttributes($attributes)
);
}
我已经有一个 user_site 扩展来配置系统和编辑模板,但没有任何 php 类。看来我不能只在这里覆盖流体模板。我是集成商,不是扩展开发人员,我想知道如何相应地覆盖或扩展此功能,而不更改或复制太多核心功能。
如何将 <iframe src=
替换为 <iframe data-name="youtube" data-src=
?
感谢 nstungcom 的评论,我在扩展 media2click 中找到了很好的示例,并且能够使用它的片段修改 iFrame 标记。由于我不是扩展开发人员,在开发人员确认之前,应谨慎使用此解决方案。非常感谢改进建议。
我对我的网站包(“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);
});
我不知道这是否是一个 so-called XCLASS。语法看起来与我在 Api.
中找到的示例不同/ext/user_site/ext_emconf.php
<?php
$EM_CONF[$_EXTKEY] = [
'title' => 'Project specific configuration and templates',
// [...]
'autoload' => [
'psr-4' => [
'MyVendorName\UserSite\' => 'Classes',
],
],
];
显然它需要这个自动加载,不管它是干什么用的。