将在线视频添加到“ textmedia”元素

时间:2018-07-17 16:10:12

标签: typo3 typo3-8.x

在扩展中,当您单击现有 textmedia 元素上的“通过URL添加媒体”按钮时,我基本上希望执行核心操作。

enter image description here

我试图查看源代码,但没有找到我可以使用的任何便捷的API函数。也许我可以为此使用DataHandler

核心功能是创建一个包含视频ID的文本文件(例如.youtube)。然后,它在sys_file中为此文件创建一条记录,并在tt_content中的记录与sys_file中的文件记录之间创建文件引用(sys_file_reference)。


我正在使用最新的TYPO3 8。

3 个答案:

答案 0 :(得分:1)

我没有完整的解决方案,但最近我不得不做类似的事情:

从视频URL创建文件并创建相应的sys_file记录:

  1. OnlineMediaController::createAction类可以满足您的需求。具体来说,函数OnlineMediaHelperRegistry::transformUrlToFile会将视频URL转换为文件(如有必要,可以创建文件)。
  2. 要使用现有操作,可以使用Ajax路由online_media_create
  3. 或者,您可以使用现有操作来对自己的代码进行建模。

在sys_file和tt_content中的现有记录之间创建关系:

  1. 请参见Creating a file reference(TYPO3文档)

示例代码 :(大多数代码来自Creating a file reference

use TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\OnlineMediaHelperRegistry;
use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Backend\Utility\BackendUtility;

...

protected function addMediaByUrl($url, $uid)
{
    $targetFolder = $GLOBALS['BE_USER']->getDefaultUploadFolder();
    $file = OnlineMediaHelperRegistry::getInstance()->transformUrlToFile(
        $url, 
        $targetFolder
    );
    $contentElement = BackendUtility::getRecord('tt_content', $uid);
    $newId = 'NEW1234';
    $data = array();
    $data['sys_file_reference'][$newId] = [
        'table_local' => 'sys_file',
        'uid_local' => $file->getUid(),
        'tablenames' => 'tt_content',
        'uid_foreign' => $contentElement['uid'],
        'fieldname' => 'assets',
        'pid' => $contentElement['pid']
    ];
    $data['tt_content'][$contentElement['uid']] = [
        'assets' => $newId
    ];
    // Get an instance of the DataHandler and process the data
    /** @var DataHandler $dataHandler */
    $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
    $dataHandler->start($data, array());
    $dataHandler->process_datamap();
    // Error or success reporting
    if (count($dataHandler->errorLog) === 0) {
        // Handle success
    } else {
        // Handle error
    }  
}

答案 1 :(得分:0)

也许您在这里找到了很好的例子 YoutubeVideoVimeoVideo-Files,您可以在vhs Docs

找到更多信息

或者您可以执行以下操作:

<flux:form id="youtubevideo" label="YouTubeVideo" description="Einbetten eines 
YouTube Videos als iframe">
  <flux:form.option name="optionsettings">
    <flux:form.option.group value="Content" />
    <flux:form.option.icon
    value="EXT:extension_key/Resources/Public/Icons/Content/YouTubeVideo.svg" />
  </flux:form.option>

  <flux:field.input name="settings.videoid" label="YouTube Video ID. Entnehmen 
  Sie die ID aus der YouTube URL. Beispiel: https://www.youtube.com/watch? 
  v=UX12345678 Die ID ist UX12345678" />
  <flux:field.select name="settings.videoformat" label="Video Format"
  maxItems="1" multiple="0" default="YouTubeVideo--normal" items="{YouTubeVideo-- 
  normal: 'Normal (4:3)', YouTubeVideo--widescreen: 'Widescreen (16:9)'}"/>
  <flux:field.checkbox name="settings.gridPull" label="Bleed Outside (Randlos 
  glücklich)" default="0" />
</flux:form>

...

<div class="YouTubeVideo {settings.videoformat}">
  <iframe width="640" height="480" src="//www.youtube- 
  nocookie.com/embed/{settings.videoid}?rel=0&showinfo=0" allowfullscreen>
  </iframe>
</div>

答案 2 :(得分:0)

最后找到了解决方法:

关键是设置正确的“ 允许的扩展名”:添加“ youtube”或“ vimeo”。 这将自动添加缺少的“通过URL添加媒体”按钮。

使用Flux Inline FAL的示例:

<f:section name="Configuration">
    <flux:form id="myCustomVideoContentElement">
        <flux:field.inline.fal name="settings.records" label="video"
         multiple="false" minItems="1" maxItems="1"
         allowedExtensions="mp4,mkv,youtube,vimeo"
        />
    </flux:form>
</f:section>

(Typo3 9.5)