TYPO3 Flux FAL 对象中的 YouTube id 内容
YouTube id contents in TYPO3 Flux FAL Object
我有一个 YouTube 视频作为 FAL 对象,我需要在我的流体模板中使用 YouTube ID。
在 FileReference 对象中,可以通过 {file.contents}
获取 ID。
但我无法在 flux:field.inline.fal
的 FAL 数组中找到 YouTube ID
在我的 flux 内容模板中,我得到了这样的视频 FAL 数组:
{v:content.resources.fal(field: 'settings.falimage', record:record) -> v:iterator.first() -> v:variable.set(name: 'image')}
在收到的数组中,我只找到 YouTube 视频的 url。有 getter 或 ViewHelper 吗?
我的设置:
TYPO3 9.5.9
通量 9.2.0
VHS 5.2.0
在尝试使用 VHS PregMatchViewHelper 失败后(https://fluidtypo3.org/viewhelpers/vhs/development/Variable/PregMatchViewHelper.html) in conjunction with the pattern https://gist.github.com/ghalusa/6c7f3a00fd2383e5ef33 我最终创建了一个自己的 ViewHelper,它从 url:
中找到 YouTube id
<?php
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
/**
* A view helper for rendering the YouTube Id from an url
*
* = Examples =
*
* <code>
* {nc:youTubeId(url: 'https://www.youtube.com/watch?v=zpOVYePk6mM')}
* </code>
* <output>
* zpOVYePk6mM
* </output>
*/
class YouTubeIdViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* Initialize arguments
*/
public function initializeArguments()
{
$this->registerArgument('url', 'string', 'YouTube url', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return string youtube id
*/
public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
{
$url = $arguments['url'];
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];
return $youtube_id;
}
}
我有一个 YouTube 视频作为 FAL 对象,我需要在我的流体模板中使用 YouTube ID。
在 FileReference 对象中,可以通过 {file.contents}
获取 ID。
但我无法在 flux:field.inline.fal
的 FAL 数组中找到 YouTube ID
在我的 flux 内容模板中,我得到了这样的视频 FAL 数组:
{v:content.resources.fal(field: 'settings.falimage', record:record) -> v:iterator.first() -> v:variable.set(name: 'image')}
在收到的数组中,我只找到 YouTube 视频的 url。有 getter 或 ViewHelper 吗?
我的设置:
TYPO3 9.5.9
通量 9.2.0
VHS 5.2.0
在尝试使用 VHS PregMatchViewHelper 失败后(https://fluidtypo3.org/viewhelpers/vhs/development/Variable/PregMatchViewHelper.html) in conjunction with the pattern https://gist.github.com/ghalusa/6c7f3a00fd2383e5ef33 我最终创建了一个自己的 ViewHelper,它从 url:
中找到 YouTube id<?php
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
/**
* A view helper for rendering the YouTube Id from an url
*
* = Examples =
*
* <code>
* {nc:youTubeId(url: 'https://www.youtube.com/watch?v=zpOVYePk6mM')}
* </code>
* <output>
* zpOVYePk6mM
* </output>
*/
class YouTubeIdViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* Initialize arguments
*/
public function initializeArguments()
{
$this->registerArgument('url', 'string', 'YouTube url', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return string youtube id
*/
public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
{
$url = $arguments['url'];
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];
return $youtube_id;
}
}