Skip to content
MiniShop3
MiniShop3
Современный компонент интернет-магазина для MODX 3
  1. Компоненты
  2. MiniShop3
  3. Сниппеты
  4. msGallery

msGallery

Сниппет для вывода галереи изображений товара.

Параметры

ПараметрПо умолчаниюОписание
tpltpl.msGalleryЧанк оформления галереи
productтекущий ресурсID товара
limit0Количество изображений (0 = все)
offset0Пропустить указанное количество
sortbypositionПоле сортировки
sortdirASCНаправление сортировки
whereJSON с дополнительными условиями
filetypeФильтр по типу файла
toPlaceholderСохранить результат в плейсхолдер
showLogfalseПоказать лог выполнения
returntplФормат: tpl, data, json

Примеры

Базовый вывод

fenom
{'msGallery' | snippet}

Для конкретного товара

fenom
{'msGallery' | snippet : [
    'product' => 15
]}

Первые 5 изображений

fenom
{'msGallery' | snippet : [
    'limit' => 5
]}

Только изображения (без видео и документов)

fenom
{'msGallery' | snippet : [
    'filetype' => 'image'
]}

Сортировка по имени

fenom
{'msGallery' | snippet : [
    'sortby' => 'name',
    'sortdir' => 'ASC'
]}

Получение данных

fenom
{set $images = 'msGallery' | snippet : [
    'return' => 'data'
]}

{foreach $images as $image}
    <img src="{$image.url}" alt="{$image.name}">
{/foreach}

Плейсхолдеры в чанке

Для каждого файла галереи:

  • {$id} — ID файла
  • {$product_id} — ID товара
  • {$name} — Имя файла
  • {$description} — Описание
  • {$url} — URL оригинала
  • {$path} — Путь к файлу
  • {$type} — MIME-тип
  • {$createdon} — Дата добавления
  • {$position} — Позиция в галерее
  • {$idx} — Порядковый номер в выборке

Превью (thumbnails)

Превью доступны по имени папки:

  • {$small} — Маленькое превью
  • {$medium} — Среднее превью
  • {$large} — Большое превью

Имена превью

Имена превью зависят от настроек медиа-источника товаров. По умолчанию создаются small, medium, large.

Пример чанка

fenom
{* tpl.msGallery *}
<div class="product-gallery" data-gallery>
    {* Главное изображение *}
    <div class="gallery-main">
        <a href="{$url}" data-fancybox="gallery">
            <img src="{$medium}" alt="{$name}">
        </a>
    </div>

    {* Превью *}
    {if $total > 1}
        <div class="gallery-thumbs">
            {foreach $images as $image}
                <button type="button"
                        data-index="{$image.idx}"
                        class="{if $image.idx == 1}active{/if}">
                    <img src="{$image.small}" alt="{$image.name}">
                </button>
            {/foreach}
        </div>
    {/if}
</div>

Альтернативный чанк для слайдера

fenom
{* tpl.msGallery.slider *}
<div class="swiper product-slider">
    <div class="swiper-wrapper">
        {foreach $images as $image}
            <div class="swiper-slide">
                <a href="{$image.url}" data-fancybox="product-gallery">
                    <img src="{$image.large}"
                         alt="{$image.name}"
                         loading="{if $image.idx > 1}lazy{else}eager{/if}">
                </a>
            </div>
        {/foreach}
    </div>
    <div class="swiper-pagination"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
</div>

<div class="swiper product-thumbs">
    <div class="swiper-wrapper">
        {foreach $images as $image}
            <div class="swiper-slide">
                <img src="{$image.small}" alt="{$image.name}">
            </div>
        {/foreach}
    </div>
</div>

Работа с видео

Если в галерее есть видео:

fenom
{foreach $files as $file}
    {if $file.type | match : 'video'}
        <video controls>
            <source src="{$file.url}" type="{$file.type}">
        </video>
    {else}
        <img src="{$file.medium}" alt="{$file.name}">
    {/if}
{/foreach}