Бывает, что нужно вставить на страницу сайта видео с YouTube, но если использовать обычный метод "embedded code":
то его обложка может быть не подходящей:
Есть разные способы, мне понравился разместит на старице любую картинку, наложить на нее кнопку "paly", а при нажатии открывать модальное окно. Единственный момент, что видео, описание и заголовок, у каждого виде свои.
Для диалогового окна буду использовать компонент из Bootstrap 4.
Пример html для вывода элементов (код упрощен, нет экранирования и проверок):
<div class="items">
<?
foreach($this->items as $item)
{
$sLink = str_replace('https://www.youtube.com/watch?v=', '', $item->link);
?>
<div class="item" data-toggle="modal" data-target="#modalVideo"
data-id="<?=$sLink?>"
data-title="<?=$item->title?>"
data-text="<?=$item->short_text?>"
>
<div class="img">
<img src="<?=$item->pic?>" alt="<?=$item->title?>" />
</div>
<div class="title">
<?=$item->title?>
</div>
</div>
<?
}
?>
</div
Код диалога:
<div class="modal" tabindex="-1" id="modalVideo">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<div class="container">
<div class="row col-md-12">
<h5 class="modal-title"></h5>
</div>
</div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="modal-iframe so_iframe">
<iframe src="https://www.youtube.com/embed/..." title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<div class="modal-text"></div>
</div>
</div>
</div>
</div>
И основной код на JavaScript:
let modalVideo = $('#modalVideo');
modalVideo.on('show.bs.modal', function (event) {
let el = $(event.relatedTarget),
id = el.data("id"),
title = el.data("title"),
text = el.data("text"),
elTitle = $(".modal-title", modalVideo),
elText = $(".modal-text", modalVideo),
elIframe = $("iframe", modalVideo),
YLink = 'https://www.youtube.com/embed/' + id
;
elTitle.html(title);
elText.html(text);
elIframe.attr("src", YLink);
})
- отслеживаем событие show.bs.modal, которое наступает когда должно открыться модальное окно Bootstrap 4, подтягиваем и подставляем нужные данные.