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

Вывод изображений

Обновлено

Подготовка

Изображения выводятся вызовами $wa->shop->ewshoppimgPlugin в Smarty-шаблонах темы магазина. Плагин возвращает ссылки, а HTML-разметку и расположение задаёт тема. Готовых шаблонов витрины для переопределения в плагине нет.

Все вызовы помещайте в проверку версии плагина. Дополнительно проверяйте результат: при выключенном «Статус плагина», неизвестной группе или отсутствии изображения ссылка будет пустой.

В примерах $page — массив текущей страницы с полями id и name, а $pages — переданный темой массив страниц. Эти переменные должны существовать в месте вызова; хелпер их не создаёт.

Одно изображение: getImage()

getImage($page_id = null, $unique_id = null, $size = null, $retina = null)
Параметр Назначение
$page_id ID страницы магазина.
$unique_id Значение поля «Уникальный идентификатор группы», например default.
$size Строка ширины и высоты через x: 300x300, 1200x400, 710x0 или 0x400.
$retina Для обычной ссылки не передавайте аргумент или передайте null. Для @2x передайте true.

Метод возвращает строку URL. Если один из первых трёх аргументов равен null, возвращается пустая строка. Для SVG возвращается ссылка на исходный файл независимо от размера и Retina.

{if !empty($wa->shop->ewshoppimgPlugin->version())}
    {$image = $wa->shop->ewshoppimgPlugin->getImage($page.id, 'default', '710x0')}
    {if !empty($image)}
        <img src="{$image|escape}" alt="{$page.name|escape}">
    {/if}
{/if}

Не передавайте false для обычной ссылки: текущая реализация выбирает @2x при любом четвёртом аргументе, отличном от null, если включены «Эскизы изображений @2x».

Изображение с Retina

{if !empty($wa->shop->ewshoppimgPlugin->version())}
    {$image = $wa->shop->ewshoppimgPlugin->getImage($page.id, 'default', '300x300')}
    {$image_2x = $wa->shop->ewshoppimgPlugin->getImage($page.id, 'default', '300x300', true)}
    {if !empty($image)}
        <img src="{$image|escape}"
             {if !empty($image_2x) && $image_2x != $image}srcset="{$image_2x|escape} 2x"{/if}
             width="300" height="300" alt="{$page.name|escape}">
    {/if}
{/if}

При выключенных «Эскизы изображений @2x» второй вызов возвращает обычную ссылку. Пример добавляет srcset только для отличающегося URL. Наличие URL само по себе не подтверждает наличие файла: после изменения настроек проверьте загрузку @2x в браузере.

Набор страниц: getImages()

getImages($categories = null, $unique_id = null, $size = null, $depth = null)

Имя первого параметра в коде — $categories, но метод ищет изображения по ID страниц. Передавайте массив страниц, у каждой из которых есть id; вложенные страницы должны находиться в childs.

Параметр Назначение
$categories Массив страниц или дерево страниц с вложенностью в childs.
$unique_id Идентификатор одной группы изображений.
$size Размер в том же формате, что у getImage().
$depth Глубина обхода дерева. 1 — только переданный верхний уровень, 2 — также его дети, 3 — ещё один уровень. null или отсутствие аргумента — все уровни.

Результат — плоский массив с ID страницы в качестве ключа. Записи без изображения в выбранной группе в результат не попадают. При выключенном статусе, неизвестной группе, неверном типе первого аргумента или отсутствии нужных изображений возвращается пустой массив.

[
    ID_СТРАНИЦЫ => [
        'image' => 'URL обычного изображения',
        'image_2x' => 'URL изображения @2x'
    ]
]

Ключ image_2x добавляется только для растровых изображений при включённых «Эскизы изображений @2x». Для SVG есть только image.

Пример получает изображения всего дерева, а выводит карточки верхнего уровня. Для вывода вложенных страниц используйте соответствующий обход childs в теме; результат хелпера уже индексирован их ID.

{if !empty($wa->shop->ewshoppimgPlugin->version())}
    {$images = $wa->shop->ewshoppimgPlugin->getImages($pages, 'default', '120x120')}
    {foreach $pages as $item}
        {if !empty($images[$item.id].image)}
            <img src="{$images[$item.id].image|escape}"
                 {if !empty($images[$item.id].image_2x)}srcset="{$images[$item.id].image_2x|escape} 2x"{/if}
                 width="120" height="120" alt="{$item.name|escape}">
        {/if}
    {/foreach}
{/if}

Генерация и совместимость

Обычные и @2x-эскизы создаются из загруженного растрового оригинала. Если запрошенного обычного эскиза нет и включены «Эскизы произвольных размеров», генерация происходит при вызове хелпера. При выключенной настройке метод всё равно формирует URL, но файл нового размера не создаёт.

В коде сохранены статические методы shopEwshoppimgHelper::getImage() и shopEwshoppimgHelper::getImages() с теми же параметрами. Для новых интеграций используйте объектный хелпер и защитную обёртку из примеров выше.