Прикрепленные файлы

Прикрепленные файлы

Плагин позволяет приложить к каждому товару любое количество файлов и дать им описание. Список приложенных файлов с описаниями и ссылками на файлы будет доступен посетителям магазина на карточке товара в месте, предусмотренном темой дизайна для хука 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 можно сразу прикреплять файлы.

  1. Создайте на сервере, в файл-менеджере приложения Сайт (или еще как-нибудь), папку wa-data/public/site/syrattach
  2. Загрузите в эту папку файлы, которые должны быть прикреплены к товарам
  3. В файле CSV, предназначенном для импорта, добавьте одну (или несколько) колонок «Прикрепленный файл».
  4. В строке с товаром укажите в этом столбце имя файла из папки wa-data/public/site/syrattach, который нужно прикрепить к этому товару

Внимание! Прикрепляемый файл должен быть строго в указанной папке. URL не поддерживаются. Указание вложенных папок тоже.

После завершения импорта файлы из папки wa-data/public/site/syrattach можно удалять.

При импорте никакие файлы не удаляются и не перезаписываются. Учтите, что повторный импорт тех же данных прикрепит к товару ещё одну копию файла, а не обновит уже прикреплённую.

Последнее обновление: 2 августа 2026