msOrderFiles

Прикрепление файлов к заказу ms2
Автор дополнения
Павел
Пакетов
32
Закачек
44 678
Обычно отвечает в течение нескольких дней
Автор дополнения
Пакетов
32
Закачек
44 678
Обычно отвечает в течение нескольких дней
Версия 1.1.7-beta
Дата выпуска 26.06.2020
Загрузки 214
Просмотры 13 031
Внимание, этот компонент требует версию PHP 5.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.3 !


Компонент предназначен для прикрепления файлов к заказу miniShop2, как из бек-энда, так и из фронт-энда.
В бек-энде файлы отображаются на вкладке, встроенной в окошко редактирования заказа miniShop2.

Как известно, после оформления заказа анонимом, на указанный email при заказе создаётся пользователь. Так вот этот пользователь прикрепляется и к файлам, которые были загружены при оформлении заказа.


Вывод формы загрузки файлов
Сниппет лучше всего размещать в чанке tpl.msOrder, чтобы в пустой корзине форма не отображалась.

Параметры сниппета msofForm:

  • tpl — Шаблон вызова формы,
  • order — ID заказа. По-умолчанию 0,
  • user — ID пользователя. По-умолчанию текущий,
  • source — Источник файлов. По-умолчанию указывается из настройки msof_source,
  • anonym — Позволять ли анонимам пользоваться формой,
  • dropzone — Массив параметров Dropzone, можно JSON,
  • maxFiles — Максимальное кол-во файлов. По-умолчанию 2,
  • maxFilesize — Максимальный размер файла в MB. По-умолчанию 2.

Пример вызова:

{'!msofForm' | snippet : [
    'maxFiles' => 20,
    'maxFilesize' => 10,
    'anonym' => false,
]}


Важно

Чтобы пользователь мог загружать файлы из фронт-энда, добавьте его группе политику доступа msOrderFilesPolicy. Тоже касается и анонимов.
После этого не забудьте сделать:
— Управление => Перезагрузить права доступа
— Управление => Завершить все сеансы
И сбросить кеш, на всякий случай!


Вывод файлов в письме пользователю/менеджеру
В нужном месте шаблона письма пишем вызов сниппета pdoResources с нашей моделью msOrderFiles:

{'!pdoResources' | snippet : [
    'class' => 'msOrderFile',
    'loadModels' => 'msOrderFiles',
    'where' => [
        'order_id' => $order['id'],
        'active' => 1,
    ],
    'sortby' => '{"rank":"ASC"}',
    'tplWrapper' => '@INLINE <ul>{$output}</ul>',
    'tpl' => '@INLINE <li><a href="{("site_url" | option) ~ $url}">{$name}</a></li>',
]}

Важно учитывать, что это решение 100% работает для miniShop2 >= 2.4, т.к. проверялось только на нём. Хотя можно попытаться совместить и с более ранними версиями магазина, скорее всего, даже без существенных правок.


Вывод списка файлов заказа
Чтобы вывести список файлов определённого заказа (например, в личном кабинете юзера), нужно воспользоваться сниппетом pdoResources:
{'!pdoResources' | snippet : [
    'class' => 'msOrderFile',
    'loadModels' => 'msOrderFiles',
    'where' => [
        'active' => 1,
        'order_id' => 10,
    ],
    'sortby' => '{"rank":"ASC"}',
    'tplWrapper' => '@INLINE <ul>{$output}</ul>',
    'tpl' => '@INLINE
        <li><a href="{$url}">{$name}</a></li>
    ',
]}


Плейсхолдеры для параметра tpl

  • id — id файла заказа,
  • order_id — id заказа в ms2,
  • source — id источника файлов,
  • name — название файла,
  • description — описание файла,
  • file — имя файла с расширением,
  • url — путь до файла, начиная от корня сайта,
  • mime — тип файла, по стандарту MIME,
  • ext — расширение файла,
  • hash — хеш, который используется для сравнения уникальности загружаемого файла,
  • size — размер файла в байтах,
  • createdon — дата загрузки файла,
  • createdby — id юзера, который загрузил файл,
  • rank — номер позиции файла в списке,
  • active — является ли файл активным.


Источник файлов msOrderFiles


В источнике файлов, помимо стандартных настроек (basePath, baseUrl), можно указать и такие:

  • allowedFileTypes — список расширений файлов, которые разрешается загружать,
  • fileNameType — знакома многим из ms2Gallery, означает метод переименования файла,
  • positionNewFiles — позиция новых файлов в списке. Другими словами, куда загружать новые файлы: в начало или в конец.


Автор выражает благодарность Михаилу Воеводскому за идею дополнения.
Обсуждение компонента в сообществе MODX.PRO.

1.1.7-beta (26.06.2020)

  • Добавлено удаление пустой папки из под файлов

1.1.6-beta (18.06.2020)

  • Добавлен сниппет msofList

1.1.5-beta2 (20.09.2018)

  • Поправлена передача параметра &timeout в JS

1.1.5-beta (20.09.2018)

  • Добавлен параметр &timeout у сниппета msofForm для указания ожидания запроса на загрузку файла, по-умолчанию 90000

1.1.4-beta (15.08.2018)

  • Добавлена работа с облаком
  • Поправлена ошибка подгрузки файлов при наличии нескольких форм компонента на странице

1.1.3-beta (15.08.2018)

  • Исправлен способ инициализации JS класса для копии формы, теперь напрямую в JS передаётся propkey

1.1.2-beta (11.04.2018)

  • Добавлен сброс кеша состояния файлов

1.1.1-beta (02.08.2017)

  • Поправлен баг на фронте, когда список файлов не очищался после оформления заказа
  • Поправлено удаление объектов файлов заказа при удалении связанного объекта msOrder
  • Небольшой рефакторинг

1.1.0-beta2 (26.12.2016)

  • Поправлен баг на MODX ниже 2.5.2, когда из фронт-энда ключ сортировки не передавался и SQL запрос из-за этого крашился

1.1.0-beta (26.12.2016)

  • Добавлена загрузка файлов из фронт-энда
  • Рефакторинг кода
  • Стилизация внешнего вида в бек-энде

1.0.2-beta2 (23.12.2016)

  • Поправлена совместимость с PHP 5.3

1.0.2-beta (20.12.2016)

  • Добавлено удаление файлов из базы при удалении связанного заказа
  • Подкорректирован внешний вид таблицы файлов заказа в бек-энде

1.0.1-beta3 (29.10.2016)

  • Поправлен тип поля rank в базе

1.0.1-beta2 (28.10.2016)

  • Поправлена подстановка базового пути в файл при аплоаде
  • При обновлении файла через процессор mgr/file/update добавлена возможность заменить файл новой версией

1.0.1-beta (28.10.2016)

  • Добавлена возможность добавлять файлы, не загруженные методом HTTP POST, через процессор mgr/file/upload

1.0.0-beta (09.09.2016)

  • Start

Последние обсуждения в сообществе MODX.pro