В расширении я в основном хотел бы делать то, что делает ядро, когда вы нажимаете кнопку «Добавить медиа по URL» на существующем элементе textmedia.
Я попытался заглянуть в исходный код, но не нашел удобной функции API, которую можно было бы использовать. Может быть, я мог бы использовать для этого DataHandler?
Ядро создает текстовый файл (например, .youtube), содержащий идентификатор видео. Затем он создает запись для этого файла в sys_file и ссылку на файл (sys_file_reference) между записью в tt_content и записью файла в sys_file.
Я использую последнюю версию TYPO3 8.





Может быть, вы поищете здесь хорошие примеры 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>У меня нет полного решения, но недавно мне пришлось сделать что-то подобное:
Создайте файл из URL-адреса видео и создайте соответствующую запись sys_file:
Создайте связь между существующими записями в sys_file и tt_content:
Образец кода: (большая часть кода взята из Создание ссылки на файл)
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. Во всяком случае. Вроде неплохое решение, проверю. Спасибо!
Я, вероятно, не достаточно ясно ответил на свой вопрос: я не хочу встраивать видео с YouTube где-нибудь на странице (хотя, по сути, это и будет результатом). Я пишу сценарий миграции для старых, больше не поддерживаемых элементов контента, которые содержат URL-адрес видео YouTube. Я хочу преобразовать элемент содержимого в «текстовое мультимедиа» со ссылкой на видео. Конечный результат должен быть таким же, как после того, как кто-то создал «текстовое медиа» и добавил URL-адрес с помощью «Добавить медиа по URL-адресу». Ваш ответ интересен, но я не думаю, что он отвечает на мой вопрос.