Добавить онлайн-видео в элемент textmedia

В расширении я в основном хотел бы делать то, что делает ядро, когда вы нажимаете кнопку «Добавить медиа по URL» на существующем элементе textmedia.

Добавить онлайн-видео в элемент textmedia

Я попытался заглянуть в исходный код, но не нашел удобной функции API, которую можно было бы использовать. Может быть, я мог бы использовать для этого DataHandler?

Ядро создает текстовый файл (например, .youtube), содержащий идентификатор видео. Затем он создает запись для этого файла в sys_file и ссылку на файл (sys_file_reference) между записью в tt_content и записью файла в sys_file.


Я использую последнюю версию TYPO3 8.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
535
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Может быть, вы поищете здесь хорошие примеры YouTube видео, Vimeo, Видео-файлы, дополнительную информацию вы можете найти на vhs Документы

Или вы можете сделать что-то вроде этого:

<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>

Я, вероятно, не достаточно ясно ответил на свой вопрос: я не хочу встраивать видео с YouTube где-нибудь на странице (хотя, по сути, это и будет результатом). Я пишу сценарий миграции для старых, больше не поддерживаемых элементов контента, которые содержат URL-адрес видео YouTube. Я хочу преобразовать элемент содержимого в «текстовое мультимедиа» со ссылкой на видео. Конечный результат должен быть таким же, как после того, как кто-то создал «текстовое медиа» и добавил URL-адрес с помощью «Добавить медиа по URL-адресу». Ваш ответ интересен, но я не думаю, что он отвечает на мой вопрос.

user9073987 18.07.2018 09:03
Ответ принят как подходящий

У меня нет полного решения, но недавно мне пришлось сделать что-то подобное:

Создайте файл из URL-адреса видео и создайте соответствующую запись sys_file:

  1. Класс OnlineMediaController :: createAction делает то, что вы ищете. В частности, функция OnlineMediaHelperRegistry :: transformUrlToFile преобразует URL видео в файл (создавая его при необходимости).
  2. Чтобы использовать существующее действие, вы можете использовать Ajax Route online_media_create.
  3. Или вы можете использовать существующее действие для моделирования своего собственного кода.

Создайте связь между существующими записями в sys_file и tt_content:

  1. См. Создание ссылки на файл (документация TYPO3)

Образец кода: (большая часть кода взята из Создание ссылки на файл)

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
    }  
}

Наконец нашел решение:

Ключ в том, чтобы установить правильный «разрешенные расширения»: добавить «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)

Примечание: флюс не является частью ядра TYPO3. Во всяком случае. Вроде неплохое решение, проверю. Спасибо!

user9073987 23.01.2020 17:14

Другие вопросы по теме