Данный компонент работает только с MODX 2. Если у вас MODX 3, тогда воспользуйтесь дополнением FileMan.
Основные возможности FileAttach
- Загрузка и управление файлами:
- Интерфейс для загрузки файлов в ресурсы через MODX Manager.
- Управление списком файлов, включая возможность сортировки и фильтрации.
- Поддержка различных типов файлов и возможность настройки фильтров по расширениям.
- Статистика и безопасность:
- Подсчет количества загрузок каждого файла.
- Возможность хранения файлов в приватном режиме (без прямого URL).
- Вычисление SHA1 хеша для загруженных файлов для проверки целостности.
- Фронтенд и бэкенд:
- Сниппет для отображения списка файлов на фронтенде.
- Поддержка частичной загрузки файлов и продолжения загрузок.
- Возможность ограничения доступа к списку файлов по группам пользователей.
- Интеграция с 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`]]
Установка и настройка
- Установка:
- Установите дополнение через Package Manager в MODX из репозитория modstore.pro.
- После установки плагин автоматически зарегистрирует modMediaSource, что позволит навигировать по загруженным файлам.
- Настройка:
- Настройте параметры плагина через системные настройки 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'];
}
В принципе все, если остались вопросы можете их задать в комментариях.