Плагин позволяет приложить к каждому товару любое количество файлов и дать им описание. Список приложенных файлов с описаниями и ссылками на файлы будет доступен посетителям магазина на карточке товара в месте, предусмотренном темой дизайна для хука frontend_product.
Плагин удобно использовать для раздачи файлов, имеющих отношение к предлагаемому товару — драйверов, обновлений прошивок, инструкций и т.д.
Плагин также предоставляет методы хелпера для отображения списка файлов в любом другом месте шаблона или просто получения массива с информацией о файлах.
Требования
- Shop-Script 10.0 или выше
- Webasyst 3.0 или выше
- PHP 7.4 или выше
Прикрепление файлов к товару
После установки плагина в карточке товара появляется раздел «Прикреплённые файлы». Он работает и в новом редакторе товара, и в устаревшем.
Файлы загружаются перетаскиванием в область загрузки или через обычный диалог выбора файлов. Загружать можно сразу несколько файлов, ход загрузки показывает прогресс-бар, а загруженный файл сразу появляется в списке. Каждому файлу можно дать описание — оно будет показано посетителю рядом со ссылкой.
Порядок файлов в списке задаётся вручную: перетащите файл за значок слева от имени. В этом же порядке список увидит посетитель магазина.
Прикрепление уже загруженного файла
Один и тот же файл часто нужен нескольким товарам — например, инструкция, общая для всей линейки. Загружать его повторно не нужно: нажмите кнопку «Прикрепить существующий файл», найдите файл по имени и прикрепите к текущему товару.
На диске такой файл хранится в единственном экземпляре, сколько бы товаров к нему ни было привязано. При этом описание файла и его позиция в списке задаются отдельно для каждого товара — один и тот же PDF может называться по-разному в карточках разных товаров.
Файл физически удаляется с диска только тогда, когда удалена последняя ссылка на него. Пока файл прикреплён хотя бы к одному товару, открепление его от других товаров на сам файл не влияет.
Показ списка файлов с помощью хука
Список файлов можно показать в месте, предусмотренном для хука frontend_product.block или frontend_product.block_aux на выбор. Выбрать можно в настройках плагина. В шаблоне доступна переменная $attachments, представляющая из себя массив данных о прикреплённых файлах. Структура:
$attachments = array(
array(
'id' => $id, /* ID вложения */
'file_id' => $file_id, /* ID файла */
'name' => $name, /* имя файла */
'ext' => $ext, /* расширение файла */
'description' => $desc, /* описание файла */
'size' => $size, /* размер файла в байтах */
'url' => $url /* ссылка на файл */
),
);
Обратите внимание на разницу между id и file_id. id — это идентификатор вложения, то есть связки «файл прикреплён к этому товару». Именно он используется во всех запросах плагина. file_id — идентификатор самого файла, общий для всех товаров, к которым этот файл прикреплён. Если один файл прикреплён к трём товарам, у него будет один file_id и три разных id.
Поддержка тем дизайна и нескольких витрин
Для показа блоков в хуках или по вызову хелпера плагин использует шаблон темы дизайна, который называется plugin.syrattach.attachments.html. Если такого шаблона в теме дизайна нет, то плагин может либо вообще ничего не показывать, либо использовать свой встроенный шаблон. Как поступать в случае, если в теме дизайна нет шаблона для плагина решать вам — настройка «Витрина без шаблона» позволяет указать, что делать в этой ситуации.
Для самой простой ситуации, сразу после установки плагина, с настройками по умолчанию, плагин будет работать на всех витринах, используя по возможности шаблон темы дизайна, а если его нет, то свой встроенный шаблон.
Если вам нужно настроить поведение для разных витрин, отключите использование шаблона по умолчанию, добавьте в нужные витрины шаблоны для плагина.
Встроенный шаблон можно посмотреть в настройках плагина — ссылка «показать» рядом с надписью «Шаблон по умолчанию». Скопируйте его код в файл темы дизайна и правьте уже там: обновление плагина такой файл не затрагивает.
Шаблон, сохранённый в старых версиях плагина
В версиях плагина до 3.0 шаблон можно было отредактировать прямо в настройках, и он сохранялся в данных приложения. Начиная с 3.0 редактирование шаблона в настройках убрано — вместо этого используйте файл темы дизайна.
Если такой сохранённый шаблон у вас остался, настройки плагина покажут предупреждение и позволят его просмотреть. Перенесите его код в plugin.syrattach.attachments.html вашей темы дизайна, после чего удалите старый шаблон по ссылке в том же предупреждении. Пока он не удалён, он продолжает использоваться на витринах, в темах которых нет файла плагина.
Встроенный хелпер
В плагин встроен хелпер, позволяющий получить массив файлов прикреплённых к товару или готовый html-код для вставки в произвольное место шаблона страницы товара.
Использование и методы хелпера
В шаблонах тем дизайна хелпер плагина вызывается так (описания обязательных и необязательных параметров см. ниже):
{$wa->shop->syrattachPlugin->getList()}— для вызова метода getList(){$wa->shop->syrattachPlugin->render()}— для вызова метода render()
Такой формат вызова хелпера гарантирует работу вашего сайта, даже если вы решите отключить или удалить наш плагин, шаблоны, обращающиеся к хелперу менять не придётся.
Метод хелпера getList($product_id)
Используйте этот метод для получения списка приложенных к товару с указанным id файлов. Структура результата аналогична той, которая передаётся в шаблон (см. выше). Файлы отсортированы в том порядке, который задан в карточке товара.
Параметры:
- int $product_id — id товара, для которого необходимо получить список приложенных файлов. Обязательный
Примеры:
получение списка файлов для товара с ID=905
{$files = $wa->shop->syrattachPlugin->getList(905)}
получение списка файлов в шаблоне карточки товара:
{$files = $wa->shop->syrattachPlugin->getList($product.id)}
Метод хелпера render($product_id, $force_on_empty)
Этот метод позволяет вывести отрендеренный шаблон со списком файлов, приложенных к товару с указанным ID в любом месте магазина. При рендере шаблона учитывается настройка отображения на витринах без шаблона, будьте внимательны.
Второй, необязательный, параметр задает поведение в случае, если у товара нет ни одного прикрепленного файла. По умолчанию в этом случае шаблон не обрабатывается
и хелпер возвращает пустую строку (чтобы не тратить время на парсинг шаблона). Если передать true, то шаблон будет обработан в любом случае.
Параметры:
- int $product_id — id товара, для которого необходимо получить список приложенных файлов. Обязательный
- bool $force_on_empty — нужно ли обрабатывать шаблон, если к товару не прикреплено ни одного файла. необязательный
Примеры:
отображение списка файлов для товара с ID=905
{$wa->shop->syrattachPlugin->render(905)}
отображение списка файлов в шаблоне карточки товара:
{$wa->shop->syrattachPlugin->render($product.id)}
Где хранятся файлы
Загруженные файлы складываются в общее хранилище, каждый файл — в собственную папку, названную по его идентификатору:
wa-data/public/shop/attachments/files/{file_id}/{имя файла}
Файлы, прикреплённые в версиях плагина до 3.0, остались лежать там же, где и были — внутри папки товара. Плагин продолжает с ними работать, переносить их куда-либо не нужно:
wa-data/public/shop/products/{подпапка}/{product_id}/attachments/{имя файла}
Одинаковые имена файлов
Одинаковые имена файлов не конфликтуют между собой, потому что каждый файл лежит в отдельной папке. Если прикрепить к товару два разных файла с одним и тем же именем, оба сохранятся как есть, ничего не будет переименовано или перезаписано. В списке они будут отличаться только описаниями, поэтому описания в таком случае лучше заполнить.
Максимальный размер загружаемых файлов
Ограничение задаёт не плагин, а настройки сервера, на котором работает магазин. Действующее ограничение плагин показывает прямо в области загрузки файлов. Если файл не загружается, проверьте в php.ini значения переменных upload_max_filesize, post_max_size и memory_limit.
Импорт из CSV
При импорте данных о товарах из CSV можно сразу прикреплять файлы.
- Создайте на сервере, в файл-менеджере приложения Сайт (или еще как-нибудь), папку
wa-data/public/site/syrattach - Загрузите в эту папку файлы, которые должны быть прикреплены к товарам
- В файле CSV, предназначенном для импорта, добавьте одну (или несколько) колонок «Прикрепленный файл».
- В строке с товаром укажите в этом столбце имя файла из папки
wa-data/public/site/syrattach, который нужно прикрепить к этому товару
Внимание! Прикрепляемый файл должен быть строго в указанной папке. URL не поддерживаются. Указание вложенных папок тоже.
После завершения импорта файлы из папки wa-data/public/site/syrattach можно удалять.
При импорте никакие файлы не удаляются и не перезаписываются. Учтите, что повторный импорт тех же данных прикрепит к товару ещё одну копию файла, а не обновит уже прикреплённую.