Вывод в теме
Обновлено
Готовая галерея
Добавьте вызов в шаблон товара, например product.html, в месте, где нужен блок видео:
{if !empty($wa->shop->ewshoppvideoPlugin->version())}
{$wa->shop->ewshoppvideoPlugin->render($product.id)}
{/if}render($product_id, $options = []) возвращает HTML опубликованных видео. Если ID не задан, опубликованных записей нет или файл шаблона не найден, возвращается пустая строка.
Стандартный шаблон выводит блок «Видео к товару», сетку обложек, заголовки и описания. Щелчок по обложке открывает модальное окно с HTML-видеоплеером. Закрыть его можно крестиком, щелчком по фону или клавишей Escape. Видеоплеер имеет атрибуты autoplay и muted.
Методы хелпера
| Метод | Результат и ограничения |
|---|---|
render($product_id, $options = []) |
Готовая разметка списка опубликованных видео; $options передаётся в шаблон |
getVideos($product_id) |
Массив опубликованных записей с сортировкой по sort ASC |
getVideo($product_id) |
Одна опубликованная запись с sort = 1, если такая есть |
У getVideos() и getVideo() нет параметра для выбора статуса. Они всегда запрашивают published. Настройку «Статус плагина» эти методы не проверяют.
getVideo() не ищет следующее опубликованное видео, если запись с sort = 1 скрыта. Если нужно получить первое среди опубликованных независимо от скрытых записей, используйте getVideos() и выберите первый элемент полученного массива.
Своя разметка списка
{if !empty($wa->shop->ewshoppvideoPlugin->version())}
{$videos = $wa->shop->ewshoppvideoPlugin->getVideos($product.id)}
{if $videos}
<div class="product-videos">
{foreach $videos as $video}
<figure>
<video controls preload="metadata"
src="{$video.url|escape}"
{if !empty($video.images[0].url)}
poster="{$video.images[0].url|escape}"
{/if}></video>
{if $video.title}
<figcaption>{$video.title|escape}</figcaption>
{/if}
{if $video.description}
<p>{$video.description|escape|nl2br}</p>
{/if}
</figure>
{/foreach}
</div>
{/if}
{/if}Плагин не перекодирует файлы. Проверяйте воспроизведение загружаемых форматов и кодеков в целевых браузерах.
Одна запись
{if !empty($wa->shop->ewshoppvideoPlugin->version())}
{$video = $wa->shop->ewshoppvideoPlugin->getVideo($product.id)}
{if $video}
<video controls src="{$video.url|escape}"
{if !empty($video.images[0])}
poster="{$video.images[0]|escape}"
{/if}></video>
{/if}
{/if}Формат обложки у двух методов различается: getVideos() возвращает объекты в images, а getVideo() — массив URL-строк. При отсутствии видео проверяйте результат через {if $video}: модель может вернуть пустой результат, а не массив записи.
Структура записи
| Поля | Содержимое |
|---|---|
id, product_id |
ID видео и товара |
title, description |
Название и краткое описание |
status, sort |
Статус (published для хелперов) и позиция |
filename, original_filename |
Имя сохранённого файла и исходное имя |
name, url |
Исходное имя и публичный URL видео |
size, ext |
Размер файла в байтах и расширение |
upload_datetime, contact_id, contact_name |
Дата загрузки, ID и имя загрузившего пользователя |
images |
При наличии обложки: у getVideos() — массив с элементом, содержащим id, url, name, status; у getVideo() — массив с URL обложки |
orig_url |
Дополнительный URL того же видео; добавляется только в getVideo() |
Поля image_url и type модель не формирует. Стандартный шаблон при отсутствии type использует MIME-тип video/mp4, поэтому воспроизведение других форматов требует отдельной проверки или адаптации шаблона.
Переопределение шаблона
Создайте в корне активной темы магазина файл:
ewshoppvideo_plugin.frontend_product.htmlПри вызове render() плагин ищет этот файл в теме, определённой текущим запросом. Если файл не найден, используется шаблон плагина:
templates/actions/frontend/FrontendProduct.htmlВ переопределённый шаблон передаются:
| Переменная | Значение |
|---|---|
$videos |
Результат getVideos() |
$product_id |
ID товара |
$options |
Второй аргумент render(), по умолчанию пустой массив |
$options — данные для собственного шаблона. Встроенный шаблон их не использует: готовых параметров числа колонок или видимости описаний у него нет.
Для начала можно скопировать содержимое стандартного шаблона в файл темы и изменить разметку, CSS и JavaScript. В шаблоне темы экранируйте пользовательские названия и описания через |escape.