首页 > 解决方案 > TYPO3 Flux FAL 对象中的 YouTube id 内容

问题描述

我有一个 YouTube 视频作为 FAL 对象,我需要在我的流体模板中使用 YouTube id。

在 FileReference 对象中,可以通过{file.contents}.

flux:field.inline.fal 但是我在我的通量内容模板中找不到 FAL 数组中的 YouTube id,我得到了这样的视频 FAL 数组:

{v:content.resources.fal(field: 'settings.falimage', record:record) -> v:iterator.first() -> v:variable.set(name: 'image')}

在收到的数组中,我只能找到 YouTube 视频的 url。是否有 getter 或 ViewHelper 呢?

我的设置:

标签: typo3fluidtypo3-9.x

解决方案


在尝试将 VHS PregMatchViewHelper ( https://fluidtypo3.org/viewhelpers/vhs/development/Variable/PregMatchViewHelper.html ) 与模式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;
    }
}

推荐阅读