Вывод изображений
Обновлено
Подготовка
Изображения выводятся вызовами $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() с теми же параметрами. Для новых интеграций используйте объектный хелпер и защитную обёртку из примеров выше.