FileMan - прикрепление файлов к ресурсам для MODX 3
Привет!
Большинство из вас знакомо с компонентом FileAttach, который позволяет прикреплять файлы к ресурсам. К сожалению, FileAttach для MODX 3 не существует (по состоянию на конец 2023 года).
В своё время мною был сделан компонент на базе FileAttach с некоторыми другими, нужными мне, функциями:
— добавлено поле group, для того, чтобы группировать на фронте файлы (к примеру «Документы» => список файлов, «Каталоги» => список файлов);
— загрузка файлов по ссылке в панели управления;
— что-то ещё, за давностью лет и не помню.
Чтобы не путаться, я свою версию компонента назвал FileMan (от man — manager). И в какой-то момент компонент был адаптирован для MODX 3.
Пакет для установки доступен в репозиториях
https://modstore.pro/packages/photos-and-files/fileman
https://extras.modx.com/package/fileman1
Исходники:
https://github.com/createit-ru/FileMan
Документация:
https://docs.modx.pro/components/fileman/
Примечания:
—документации пока нет, надеюсь подготовить в ближайшее время, есть!, ссылка выше.
—это beta, уже релизная версия, первые баги были поправлены и доработки преводены.
— на MODX 2 даже не пытайтесь устанавливать! Только для MODX 3!
Пишите в комментариях ваши замечания, пожелания. Возможно, вам нужен еще какой-то функционал — доработаем по согласованию.
Если вам пригодился компонент, есть желание поблагодарить чашкой кофе — можно сделать это нажав на кнопочку:
Благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят меня внимательно прислушиваться к вашим пожеланиям!!!
Большинство из вас знакомо с компонентом FileAttach, который позволяет прикреплять файлы к ресурсам. К сожалению, FileAttach для MODX 3 не существует (по состоянию на конец 2023 года).
В своё время мною был сделан компонент на базе FileAttach с некоторыми другими, нужными мне, функциями:
— добавлено поле group, для того, чтобы группировать на фронте файлы (к примеру «Документы» => список файлов, «Каталоги» => список файлов);
— загрузка файлов по ссылке в панели управления;
— что-то ещё, за давностью лет и не помню.
Чтобы не путаться, я свою версию компонента назвал FileMan (от man — manager). И в какой-то момент компонент был адаптирован для MODX 3.
Пакет для установки доступен в репозиториях
https://modstore.pro/packages/photos-and-files/fileman
https://extras.modx.com/package/fileman1
Исходники:
https://github.com/createit-ru/FileMan
Документация:
https://docs.modx.pro/components/fileman/
Примечания:
—
—
— на MODX 2 даже не пытайтесь устанавливать! Только для MODX 3!
Пишите в комментариях ваши замечания, пожелания. Возможно, вам нужен еще какой-то функционал — доработаем по согласованию.
Если вам пригодился компонент, есть желание поблагодарить чашкой кофе — можно сделать это нажав на кнопочку:
Благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят меня внимательно прислушиваться к вашим пожеланиям!!!
Комментарии: 52
Ну и отлично! Если будут вопросы по доке, пиши
На страницах-символичеких ссылках не работает
Хоть по подробнее как-то… если хотите улучшения. Я этот сценарий не использую в своей работе.
Ок, если создать документ, а к нему — символическую ссылку, обоим ресурсам назначить один и тот же чанк, в чанке вызвать сниппет fmFiles, то в документе сниппет сработает и файлы будут отображаться, а в символической ссылке — нет.
А если параметр resource если указать для сниппета fmFiles правильный (соответствующий основному ресурсу)?..
Понял, вот как-то так получилось сделать, т.к. симлинк отдает в контенте id основной страницы:
{if $_modx->resource.id | resource:'class_key' == 'MODX\Revolution\modSymLink'}
{$_modx->runSnippet('!fmFiles', [
'tpl' => 'myTpl',
'resource' => $_modx->resource.id | resource:'content'
])}
{else}
{$_modx->runSnippet('!fmFiles', [
'tpl' => 'myTpl',
'resource' => $id
])}
{/if}
Да, типа того… в целом можно и внутрь сниппета fmFiles в будущем засунуть проверку… хотя мне кажется случай использования SymLink в целом не самый частый
Привет! Да, кажется есть ошибка при создании нового ресурса… завтра постараюсь поправить, затестировать, выпустить обновление.
Временно можно в плагине в начале поставить проверку типа
Временно можно в плагине в начале поставить проверку типа
case 'OnDocFormPrerender':
if(empty($resource)) {
return;
}
.. код ниже
Супер, благодарю за оперативность! Будем ждать обновления :)
Выпустил обновление, хотя по сути там и есть 3 строчки, которые я выше написал.
Кстати, я почему не заметил проблемы.
В MODX 3 создание ресурса теперь реализовано через отдельное упрощенное окно, похожее быстрое создание ресурса. Ну и для этого окна не возникает события OnDocFormPrerender.
А при использовании Collection ресурс создается старым способом, с открытием новой страницы (?a=resource/create).
Я этот момент как-то упустил. В общем сейчас при создании ресурса вкладка Файлы не показывается.
В MODX 3 создание ресурса теперь реализовано через отдельное упрощенное окно, похожее быстрое создание ресурса. Ну и для этого окна не возникает события OnDocFormPrerender.
А при использовании Collection ресурс создается старым способом, с открытием новой страницы (?a=resource/create).
Я этот момент как-то упустил. В общем сейчас при создании ресурса вкладка Файлы не показывается.
Супер! Алексей, благодарю. Вы молодец :)
Ещё один момент: при удалении файла из ресурса, если он единственный — не удаляется каталог с номером ресурса в папке «files». Это так и задумано?
Это вообще никак не задумано) можно удалять конечно бы, пустые каталоги раздражают. Такая же история с miniShop2 есть, ну или была, не знаю, тоже часто каталоги остаются.
Как говорится — на усмотрение автора. :)) Еще раз спасибо, Алексей, за оперативность!
Загрузил файл и неожиданно получил вот такую ошибку:
Ошибка сервера не позволяет загрузить содержимое этой таблицы. Обратитесь к консоли вашего браузера, журналу ошибок менеджера и/или сервера для получения дополнительной информации.В консоли:
Warning: Undefined array key «modUser» in /home/site.ru/public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDOMap.php on line 48В журнале:
Notice: Indirect modification of overloaded element of xPDO\xPDOMap has no effect in /home/site.ru/public_html/core/components/tickets/model/tickets/metadata.mysql.php on line 26
{«success»:false,«message»:"\u0414\u043e\u0441\u0442\u0443\u043f \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d.",«total»:0,«data»:[],«object»:{«code»:401}}"
"(ERROR @ /home/site.ru/public_html/core/src/Revolution/modConnectorResponse.php: 174) PHP warning: Cannot modify header information — headers already sent by (output started at /home/site.ru/public_html/core/vendor/xpdo/xpdo/src/xPDO/xPDOMap.php:48)"
Так это с tickets какая-то засада… он под MODX 3 вообще работает хоть как-то?
/core/components/tickets/model/tickets/metadata.mysql.php
@Наумов Алексей На modstore.pro забыл указать ссылку на документацию (не в описании, а в отдельном поле можно указать)
Спасибо, указал
А совместим ли этот компонент с FileAttach?
Т.е. если обновиться с MODX 2 на 3 и вместо FileAttach установить FileMan, то увидит ли новый компонент файлы, прикреплённые с помощью FileAttach?
Т.е. если обновиться с MODX 2 на 3 и вместо FileAttach установить FileMan, то увидит ли новый компонент файлы, прикреплённые с помощью FileAttach?
Нет, не совместим. И названия таблиц и колонки немного разные, само ничего не подцепится.
Но скопировать данные sql запросом можно.
Но скопировать данные sql запросом можно.
@Наумов Алексей, подскажите, какие нужны разрешения, чтобы пользователь видел вкладку с файлами в MODx3? Админ видит вкладку, а контент_едитор — нет.
Привет! наверное мой косяк…
Я хотел сделать набор разрешений, но не доделал, а следы остались.
В общем в плагине FileMan найди строчку 14, закомментируй её:
Я хотел сделать набор разрешений, но не доделал, а следы остались.
В общем в плагине FileMan найди строчку 14, закомментируй её:
// нужно закомментировать:
if (!$modx->hasPermission('fileman_doclist')) return;
Еще один пермишн проверяется при загрузке файлов «file_upload», но это стандартный MODx, который нужен для загрузки файлов.
Благодарю за ответ. Не помогло :))
После комментирования у всех пропадает вкладка.
Странно, ну по идее это то самое место… больше я не находил.
Нужно повнимательнее перепроверить, но это в свободное время.
Нужно повнимательнее перепроверить, но это в свободное время.
Я, конечно, починил, но было бы здорово пофиксить. :) Для людей, так сказать.
Дело в этой строчке кода было то?
А новую версию да, выпущу. Вообще, думаю стоит сделать набор permissions и политики, чтобы управлять этим можно было всем.
А новую версию да, выпущу. Вообще, думаю стоит сделать набор permissions и политики, чтобы управлять этим можно было всем.
Идея с пермишенами и политиками — очень нужно и правда полезно. Учитывая, что это работа с файлами :)
А дело действительно в строчке. Комментирование не помогло. И я просто вписал в неё какие-то существующие разрешения. :)
Так сказать, методом научного тыка. :)
А дело действительно в строчке. Комментирование не помогло. И я просто вписал в неё какие-то существующие разрешения. :)
Так сказать, методом научного тыка. :)
Привет.
Я запульнул новую версию в репозиторий, где добавил шаблон политик FileManPolicyTemplate и политику FileManPolicy на его основе.
Правда на моем демо сайте сама политика в силу каких-то причин не создалась… только шаблон. Политику можно создать на основе шаблона. Проверь, создалась ли у тебя политика…
ну и соответственно в группу менеджеров можно добавить эту политику, чтобы дать права.
Там такие разрешения:
fileman — доступ к основному контроллеру компонента (Пакеты / FileMan)
fileman_list — список файлов
fileman_resource_tab — вкладка у ресурса
fileman_create — загрузка новых файлов
fileman_save — любое редактирование
fileman_remove — удаление файла
Я запульнул новую версию в репозиторий, где добавил шаблон политик FileManPolicyTemplate и политику FileManPolicy на его основе.
Правда на моем демо сайте сама политика в силу каких-то причин не создалась… только шаблон. Политику можно создать на основе шаблона. Проверь, создалась ли у тебя политика…
ну и соответственно в группу менеджеров можно добавить эту политику, чтобы дать права.
Там такие разрешения:
fileman — доступ к основному контроллеру компонента (Пакеты / FileMan)
fileman_list — список файлов
fileman_resource_tab — вкладка у ресурса
fileman_create — загрузка новых файлов
fileman_save — любое редактирование
fileman_remove — удаление файла
Привет. Политика не создалась.
Точнее, не так. Она как бы есть, но её как бы нет. Как тот суслик :)
При попытке создать из шаблона политик новую с названием FileManPolicy — говорит, что такая политика уже есть.
Но в списке политик её не видно. В чем может быть дело?
При попытке создать из шаблона политик новую с названием FileManPolicy — говорит, что такая политика уже есть.
Но в списке политик её не видно. В чем может быть дело?
Не могу разобраться в чем дело… она создалась значит, но не привязалась к шаблону. Видимо установщик косячит. Буду искать причину.
Нашел, исправил) обновил пакет в modstore.pro.
У меня он выложен еще в modx.com, но у них настолько глючный репозиторий… я уже 3 раза писал им по поводу критичных ошибок, из-за которых просто невозможно выложить пакет — но воз и ныне там, я не могу выложить обновление.
У меня он выложен еще в modx.com, но у них настолько глючный репозиторий… я уже 3 раза писал им по поводу критичных ошибок, из-за которых просто невозможно выложить пакет — но воз и ныне там, я не могу выложить обновление.
Обновил. Работает. Получается, вы молодец-молодец :))
И чуть не забыл — ты большой молодец! :)
@Наумов Алексей нашёл ещё баг. В источнике файлов для Fileman указываю максимальный размер файла. Он больше, чем в системных настройках. Но не даёт загружать — подтягивает ограничение из системных настроек.
А баг ли это?.. какая настройка важнее, глобальная или то, что указано в источнике файлов?
Алексей, тогда зачем нужна настройка размера файлов для каждого источника файлов, если будет работать только одна глобальная настройка? :))
Как я понимаю, это было сделано для того, чтобы можно было гибко ограничивать конкретные источники файлов.
Как я понимаю, это было сделано для того, чтобы можно было гибко ограничивать конкретные источники файлов.
Например, для источника картинок один размер, для документов — другой и т.д. А если работает только глобальная настройка — это не имеет никакого смысла.
А что за настройка то у источника файлов?
Вот посмотри код, я вижу что проверка внутри объекта modMediaSource и там проверяется именно системная настройка upload_maxsize
Вот посмотри код, я вижу что проверка внутри объекта modMediaSource и там проверяется именно системная настройка upload_maxsize
В настройках дополнения fileman есть опция fileman_mediasource. Там указываю источник файлов. В источнике файлов есть настройка upload_maxsize в которой указываю значение.
Не вижу в настройках источника файлов upload_maxsize.
Да и судя по коды (ссылку давал выше) — оно не будет учитываться. Этот функционал, вероятно, нужно дописывать самостоятельно (имею ввиду в компоненте), как это сделано, к примеру, в галерее miniShop2
Да и судя по коды (ссылку давал выше) — оно не будет учитываться. Этот функционал, вероятно, нужно дописывать самостоятельно (имею ввиду в компоненте), как это сделано, к примеру, в галерее miniShop2
Её просто добавили руками (поэтому фиолетовая), никто не гарантирует, что она еще при этом должна работать) Среди стандартных настроек такой нет.
Странно, руками не должны были добавлять.
Алексей, добавить эту функциональность сможете для компонента? Или это сложно?
Алексей, добавить эту функциональность сможете для компонента? Или это сложно?
Это не очень то наверное сложно, просто не совсем понятно, насколько это нужно… в следующем обновлении может быть
Расскажу пример. Контент менеджеры грузят картинки на сайте. Для этого общий размер файлов для источников картинок снижен до 800кб.
А с помощью FileMan грузят документы — pdf, docx и т.д. Для источника FileMan нужно установить своё ограничение, чтобы могли грузить документы большего размера. И при этом — не увеличивать размер для остальных источников.
Конечно, идеальным сценарием, было бы здорово иметь возможность выбирать источники файлов для каждого ресурса. Как это сделано в ms2gallery. Тогда получится совсем гибко. :)
А с помощью FileMan грузят документы — pdf, docx и т.д. Для источника FileMan нужно установить своё ограничение, чтобы могли грузить документы большего размера. И при этом — не увеличивать размер для остальных источников.
Конечно, идеальным сценарием, было бы здорово иметь возможность выбирать источники файлов для каждого ресурса. Как это сделано в ms2gallery. Тогда получится совсем гибко. :)
Подскажите, как на феноме проверить на пустоту FileMan? Пробовал в плейсхолдер результат помещать, но не получилось.
{set $files = $_modx->runSnippet('FileMan')}
{if $files}
ФАЙЛЫ
{/if}
Спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.