FileAttach — загрузка файлов к ресурсам MODX

FileAttach - загрузка файлов к ресурсам MODX MODX Revo
FileAttach — это мощный инструмент для создания коллекций файлов в MODX. Он предоставляет интерфейс для загрузки файлов в ресурсы, управления списком файлов, просмотра статистики загрузок и многое другое. Давайте рассмотрим основные возможности и настройки этого плагина.

Данный компонент работает только с MODX 2. Если у вас MODX 3, тогда воспользуйтесь дополнением FileMan.

Основные возможности FileAttach

  1. Загрузка и управление файлами:
    • Интерфейс для загрузки файлов в ресурсы через MODX Manager.
    • Управление списком файлов, включая возможность сортировки и фильтрации.
    • Поддержка различных типов файлов и возможность настройки фильтров по расширениям.
  2. Статистика и безопасность:
    • Подсчет количества загрузок каждого файла.
    • Возможность хранения файлов в приватном режиме (без прямого URL).
    • Вычисление SHA1 хеша для загруженных файлов для проверки целостности.
  3. Фронтенд и бэкенд:
    • Сниппет для отображения списка файлов на фронтенде.
    • Поддержка частичной загрузки файлов и продолжения загрузок.
    • Возможность ограничения доступа к списку файлов по группам пользователей.
  4. Интеграция с MediaSource:
    • Просмотр дерева ресурсов и прикрепленных к ним файлов через MediaSource.
    • Поддержка различных источников медиа для удобного управления файлами.

Документация

Сниппет FileAttach

Выводит список файлов.

Название Значение по умолчанию Описание
&limit 0 Ограничение вывода файлов на странице. Если не указано, то вывод всех прикрепленных файлов
&makeURL false Создавать ссылку для скачивания файла
&outputSeparator Разделитель вывода записей
&privateUrl false Форсировать использование обработчик скачиваний, что позволяет считать скачивания даже для открытых файлов
&resource 0 Показать файлы для документа с номером id, если не указано, то вывод только для текущего документа
&showSize false Получать размер файла
&sortBy name Сортировать по полю
&sortDir ASC Направление сортировки
&toPlaceholder false Сохранять результат в плейсхолдер, вместо прямого вывода на странице
&tpl FileAttachTpl Чанк оформления каждого ряда файлов

Чанк FileAttachTpl

Позволяет задать произвольное оформление для вывода записей файлов.

Название Описание
&description Описание
&docid Идентификатор ресурса, для которого загружен файл
&download Количество скачиваний
&hash Контрольная сумма SHA1
&id Идентификатор файла
&internal_name Внутреннее имя. Содержит имя файла в файловой системе
&name Имя файла. Совпадает с internal_name когда private=нет
&path Путь внутри медиа источника
&private Признак закрытости файла
&rank Порядок в списке. Можно использовать для сортировки
&size Размер файла в байтах

Изначальное содержание чанка:

<p>[[+description:notempty=`<strong>[[+description]]</strong><br/>`]]
<a href="[[+url]]">[[+name]]</a> <span class="badge">[[+download]]</span>
[[+size:notempty=`<br/><small>Size: [[+size]] bytes</small>`]]
[[+hash:notempty=`<br/><small>SHA1: [[+hash]]</small>`]]</p>

Класс FileItem

Методы

Название Описание Параметры
generateName Сгенерировать новое имя файла length (int) = 32
getFullPath Получить полный путь к файлу
getPath Получить путь к файлу относительно корня медиа источника
getSize Получить размер файла
getUrl Получить ссылку на файл
rename Переименовать файл name (str)
sanitizeName Отфильтровать недопустимые комбинации символов в имени файла name (str)
setPrivate Установить режим приватности private (bool)

Системные настройки

Название Значение по умолчанию Описание
calchash false Вычислять контрольную сумму SHA1 при загрузке файла
download true Считать количество скачиваний
files_path Путь Путь файла относительно корня медиа источника. Завершается на «/».
mediasource 1 Идентификатор медиа источника
private false Делать файл закрытым при загрузке
put_docid false Размещать файл в подкаталоге ресурса
templates Список шаблонов документов, в которых будет активирован модуль. Перечисление через запятую
user_folders false Размещать файл в подкаталоге пользователя

Коннектор для скачивания файлов

Закрытые файлы скачиваются через коннектор, что позволяет скрыть прямую ссылку на файл и произвести подсчет количества скачиваний. Можно скачивать открытые файлы через коннектор, указав в вызове сниппета &privateUrl=1, при этом коннектор сделает перенаправление на прямую ссылку.

Ссылка на коннектор имеет вид: MODX_ASSETS_URL/components/fileattach/connector.php?action=web/download&ctx=web&id=file_id, где file_id — порядковый номер файла в таблице БД.

Политики доступа

Список разрешений

Название Описание
fileattach.doclist Управление файлами в документе
fileattach.download Возможность скачивать файлы
fileattach.totallist Управление всеми файлами

Пример использования

В простом случае можно просто вызвать сниппет:

[[FileAttach]]

Чтобы для всех файлов считалось количество скачиваний надо чтобы они открывались через приватную ссылку:

[[FileAttach? &privateUrl=`1`]]

Сортировка по порядку, заданному вручную:

[[FileAttach? &sortby=`rank`]]

Установка и настройка

  1. Установка:
  2. Настройка:
    • Настройте параметры плагина через системные настройки MODX.
    • Вы можете указать пути к файлам и URL для доступа к загруженным файлам.

Пример работы с компонентом из практики

На одном из сайтов требовалось создать вот такой блок с документами

Блок с документами

Как вы видите нужно загружать различные типы файлов, на против каждого типа вывести иконку, размер файла, его отображаемое имя и с какого числа он действует. Приступим к реализации.

После установки FileAttach, для удобства хранения в корне сайта создадим папку doc и сделаем для нее медиа источник, перечислив в нем нужные расширения файлов.

медиа источник для документов

После этого идем в системные настройки и у настроек задаем:

  • Разрешённые к загрузке файлы — upload_files — перечисляем разрешения файлов через запятую, которые указали в источнике.
  • Медиа источник — fileattach.mediasource — устанавливаем созданный медиа источник.

Предварительные настройки сделали, теперь реализуем выше приведенный блок. Зайдем в ресурс и загрузим документы в вкладке Файлы.

Загрузка файлов для ресурса

После загрузки отредактируем (обновим) каждый файл.

Обновляем загруженные файлы

Осталось только их вывести в ресурсе, для этого создадим чанк с нашим оформлением, пусть будет FileAttachDoc:

<div class="w-100 mb-2">
    <img width="35" height="47" src="image/icon-doc/[[+ext]].png" alt="Иконка [[+ext]]" class="float-start mt-1 me-3">
    <a href="[[+url]]" target="_blank" class="text-dark text-decoration-none" download>
        [[+description]]<br/>
        <p class="text-secondary">[[!FileSize? &input=`[[+url]]`]]   <em>[[+tag]]</em></p> 
    </a>
</div>

Здесь:

[[+ext]] — выводит разрешения файлов (например pdf), а image/icon-doc/ лежат соответствующие иконки.

FileSize — это кастомный сниппет который выводит размер файла в байтах, КБ, МБ или ГБ — в зависимости от размера загружаемого файла, без него тоже можно обойтись, если вас устраивают килобайты. Вот код данного сниппета:

<?php
if(!empty($get_ext)){
  //Получить расширение файла в нижнем регистре
  $ext = mb_strtolower(pathinfo($input, PATHINFO_EXTENSION));
  return $ext;
}else{
  //Получить размер файла
  $units = array(
    'gb' => array('size' => 1073741824, 'label' => 'ГБ'),
    'mb' => array('size' => 1048576,    'label' => 'МБ'),
    'kb' => array('size' => 1024,       'label' => 'КБ'),
    'b'  => array('size' => 0,          'label' => 'байт')
  );
  $input = MODX_BASE_PATH . $input;
  $size = is_file($input) ? filesize($input) : 0;
  $unit = (isset($unit) && isset($units[$unit])) ? $unit : false;
  
  if ($size > 0) {
    if ($unit === false) {
      foreach ($units as $key => $properties) {
        if ($size >= $properties['size']) {
          $unit = $key;
          break;
        }
      }
    }
    if ($unit != 'b'){
      $size = $size / $units[$unit]['size'];
    }
  }
  else {
    if ($unit === false) $unit = 'b';
  }
  return round($size, 2) . ' ' . $units[$unit]['label'];
}

В принципе все, если остались вопросы можете их задать в комментариях.

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
Web-Revenue.ru
Добавить комментарий