Данный компонент работает только с 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'];
}
В принципе все, если остались вопросы можете их задать в комментариях.










Здравствуйте. Подскажите пожалуйста что может быть не так. Прикрепил архив в ресурсу, на фронте всё отображается корректно, даже скачивается, но почему-то пустой 0б…
Пустой кто?
Здравствуйте.
Есть вопрос по выбору уже ранее загруженного файла для нескольких ресурсов. Как это сделать?
Например — есть 2 ресурса. У одного я загрузил документ пдф. Хоу этот же документ выбрать, когда редактирую другой ресурс. Сейчас у меня (по умолчанию) открывается попап, где я могу загрузить файлы только из внешних источников. Как использовать уже ранее загруженне файлы у нескольких ресурсов?
Здравствуйте. По моему никак — давно с компонентом этим не работал (да и проверить сейчас негде). А вообще у него есть параметр resource, который позволяет выводить документы прикрепленные к другим ресурсам
спасибо за быстрый ответ. Попробую еще уточнить у народа на modx.pro ((
ПС предполагал ,что это как-то можно включить в настройках.