К содержимому
Вывод в теме

Вывод в теме

Обновлено

Готовая галерея

Добавьте вызов в шаблон товара, например 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.