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!

Пишите в комментариях ваши замечания, пожелания. Возможно, вам нужен еще какой-то функционал — доработаем по согласованию.

Если вам пригодился компонент, есть желание поблагодарить чашкой кофе — можно сделать это нажав на кнопочку:



Благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят меня внимательно прислушиваться к вашим пожеланиям!!!
Наумов Алексей
17 октября 2023, 17:04
modx.pro
2
1 786
+14

Комментарии: 52

Баха Волков
17 октября 2023, 17:11
+1
Ну и отлично! Если будут вопросы по доке, пиши
    Andrei
    13 ноября 2023, 10:50
    0
    На страницах-символичеких ссылках не работает
      Наумов Алексей
      14 ноября 2023, 10:00
      0
      Хоть по подробнее как-то… если хотите улучшения. Я этот сценарий не использую в своей работе.
        Andrei
        14 ноября 2023, 10:49
        0
        Ок, если создать документ, а к нему — символическую ссылку, обоим ресурсам назначить один и тот же чанк, в чанке вызвать сниппет fmFiles, то в документе сниппет сработает и файлы будут отображаться, а в символической ссылке — нет.
          Наумов Алексей
          14 ноября 2023, 11:05
          0
          А если параметр resource если указать для сниппета fmFiles правильный (соответствующий основному ресурсу)?..
            Andrei
            14 ноября 2023, 11:26
            0
            Понял, вот как-то так получилось сделать, т.к. симлинк отдает в контенте 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}
              Наумов Алексей
              14 ноября 2023, 11:31
              +1
              Да, типа того… в целом можно и внутрь сниппета fmFiles в будущем засунуть проверку… хотя мне кажется случай использования SymLink в целом не самый частый
      Wassi Wassinen
      16 ноября 2023, 20:30
      0
      Приветствую. Спасибо за компонент.
      Есть проблема — при установке fileMan с Collections при создании ресурса в коллекции получаю такую ошибку:



      После удаления fileMan — ошибка исчезает.
        Наумов Алексей
        16 ноября 2023, 20:45
        +1
        Привет! Да, кажется есть ошибка при создании нового ресурса… завтра постараюсь поправить, затестировать, выпустить обновление.

        Временно можно в плагине в начале поставить проверку типа
        case 'OnDocFormPrerender':
            if(empty($resource)) {
              return;
            }
            .. код ниже
          Wassi Wassinen
          16 ноября 2023, 22:51
          0
          Супер, благодарю за оперативность! Будем ждать обновления :)
            Наумов Алексей
            17 ноября 2023, 10:51
            0
            Выпустил обновление, хотя по сути там и есть 3 строчки, которые я выше написал.
              Наумов Алексей
              17 ноября 2023, 10:55
              0
              Кстати, я почему не заметил проблемы.
              В MODX 3 создание ресурса теперь реализовано через отдельное упрощенное окно, похожее быстрое создание ресурса. Ну и для этого окна не возникает события OnDocFormPrerender.

              А при использовании Collection ресурс создается старым способом, с открытием новой страницы (?a=resource/create).

              Я этот момент как-то упустил. В общем сейчас при создании ресурса вкладка Файлы не показывается.
                Wassi Wassinen
                18 ноября 2023, 00:36
                0
                Супер! Алексей, благодарю. Вы молодец :)
                  Wassi Wassinen
                  18 ноября 2023, 00:40
                  0
                  Ещё один момент: при удалении файла из ресурса, если он единственный — не удаляется каталог с номером ресурса в папке «files». Это так и задумано?
                    Наумов Алексей
                    19 ноября 2023, 11:20
                    0
                    Это вообще никак не задумано) можно удалять конечно бы, пустые каталоги раздражают. Такая же история с miniShop2 есть, ну или была, не знаю, тоже часто каталоги остаются.
                      Wassi Wassinen
                      19 ноября 2023, 14:39
                      0
                      Как говорится — на усмотрение автора. :)) Еще раз спасибо, Алексей, за оперативность!
            Andrei
            20 ноября 2023, 22:40
            0
            Загрузил файл и неожиданно получил вот такую ошибку:
            Ошибка сервера не позволяет загрузить содержимое этой таблицы. Обратитесь к консоли вашего браузера, журналу ошибок менеджера и/или сервера для получения дополнительной информации.
            В консоли:
            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)"
              Наумов Алексей
              21 ноября 2023, 10:42
              0
              Так это с tickets какая-то засада… он под MODX 3 вообще работает хоть как-то?
              /core/components/tickets/model/tickets/metadata.mysql.php
              Баха Волков
              21 ноября 2023, 17:02
              0
              @Наумов Алексей На modstore.pro забыл указать ссылку на документацию (не в описании, а в отдельном поле можно указать)
              Ярослав Старовойтов
              04 января 2024, 15:12
              0
              А совместим ли этот компонент с FileAttach?
              Т.е. если обновиться с MODX 2 на 3 и вместо FileAttach установить FileMan, то увидит ли новый компонент файлы, прикреплённые с помощью FileAttach?
                Наумов Алексей
                04 января 2024, 18:31
                +1
                Нет, не совместим. И названия таблиц и колонки немного разные, само ничего не подцепится.
                Но скопировать данные sql запросом можно.
                Wassi Wassinen
                17 января 2024, 17:32
                0
                @Наумов Алексей, подскажите, какие нужны разрешения, чтобы пользователь видел вкладку с файлами в MODx3? Админ видит вкладку, а контент_едитор — нет.
                  Наумов Алексей
                  17 января 2024, 18:42
                  0
                  Привет! наверное мой косяк…
                  Я хотел сделать набор разрешений, но не доделал, а следы остались.

                  В общем в плагине FileMan найди строчку 14, закомментируй её:
                  // нужно закомментировать:
                  if (!$modx->hasPermission('fileman_doclist')) return;
                  Еще один пермишн проверяется при загрузке файлов «file_upload», но это стандартный MODx, который нужен для загрузки файлов.
                    Wassi Wassinen
                    17 января 2024, 18:50
                    0
                    Благодарю за ответ. Не помогло :))
                      Wassi Wassinen
                      17 января 2024, 18:53
                      0
                      После комментирования у всех пропадает вкладка.
                        Наумов Алексей
                        17 января 2024, 20:27
                        0
                        Странно, ну по идее это то самое место… больше я не находил.

                        Нужно повнимательнее перепроверить, но это в свободное время.
                          Wassi Wassinen
                          20 января 2024, 01:19
                          0
                          Я, конечно, починил, но было бы здорово пофиксить. :) Для людей, так сказать.
                            Наумов Алексей
                            20 января 2024, 12:36
                            0
                            Дело в этой строчке кода было то?

                            А новую версию да, выпущу. Вообще, думаю стоит сделать набор permissions и политики, чтобы управлять этим можно было всем.
                              Wassi Wassinen
                              20 января 2024, 12:42
                              0
                              Идея с пермишенами и политиками — очень нужно и правда полезно. Учитывая, что это работа с файлами :)

                              А дело действительно в строчке. Комментирование не помогло. И я просто вписал в неё какие-то существующие разрешения. :)
                              Так сказать, методом научного тыка. :)
                                Наумов Алексей
                                20 января 2024, 18:26
                                0
                                Привет.
                                Я запульнул новую версию в репозиторий, где добавил шаблон политик FileManPolicyTemplate и политику FileManPolicy на его основе.
                                Правда на моем демо сайте сама политика в силу каких-то причин не создалась… только шаблон. Политику можно создать на основе шаблона. Проверь, создалась ли у тебя политика…

                                ну и соответственно в группу менеджеров можно добавить эту политику, чтобы дать права.

                                Там такие разрешения:

                                fileman — доступ к основному контроллеру компонента (Пакеты / FileMan)
                                fileman_list — список файлов
                                fileman_resource_tab — вкладка у ресурса
                                fileman_create — загрузка новых файлов
                                fileman_save — любое редактирование
                                fileman_remove — удаление файла
                                  Wassi Wassinen
                                  21 января 2024, 22:15
                                  0
                                  Привет. Политика не создалась.
                                    Wassi Wassinen
                                    21 января 2024, 22:18
                                    0
                                    Точнее, не так. Она как бы есть, но её как бы нет. Как тот суслик :)
                                    При попытке создать из шаблона политик новую с названием FileManPolicy — говорит, что такая политика уже есть.
                                    Но в списке политик её не видно. В чем может быть дело?
                                      Наумов Алексей
                                      22 января 2024, 09:54
                                      0
                                      Не могу разобраться в чем дело… она создалась значит, но не привязалась к шаблону. Видимо установщик косячит. Буду искать причину.
                                        Наумов Алексей
                                        22 января 2024, 11:08
                                        +1
                                        Нашел, исправил) обновил пакет в modstore.pro.
                                        У меня он выложен еще в modx.com, но у них настолько глючный репозиторий… я уже 3 раза писал им по поводу критичных ошибок, из-за которых просто невозможно выложить пакет — но воз и ныне там, я не могу выложить обновление.
                                          Wassi Wassinen
                                          22 января 2024, 13:15
                                          0
                                          Обновил. Работает. Получается, вы молодец-молодец :))
                                      Wassi Wassinen
                                      21 января 2024, 22:21
                                      +1
                                      И чуть не забыл — ты большой молодец! :)
                        Wassi Wassinen
                        24 февраля 2024, 20:02
                        0
                        @Наумов Алексей нашёл ещё баг. В источнике файлов для Fileman указываю максимальный размер файла. Он больше, чем в системных настройках. Но не даёт загружать — подтягивает ограничение из системных настроек.
                          Наумов Алексей
                          29 февраля 2024, 14:56
                          0
                          А баг ли это?.. какая настройка важнее, глобальная или то, что указано в источнике файлов?
                            Wassi Wassinen
                            01 марта 2024, 15:11
                            0
                            Алексей, тогда зачем нужна настройка размера файлов для каждого источника файлов, если будет работать только одна глобальная настройка? :))

                            Как я понимаю, это было сделано для того, чтобы можно было гибко ограничивать конкретные источники файлов.
                              Wassi Wassinen
                              01 марта 2024, 15:16
                              0
                              Например, для источника картинок один размер, для документов — другой и т.д. А если работает только глобальная настройка — это не имеет никакого смысла.
                                Наумов Алексей
                                01 марта 2024, 15:41
                                0
                                А что за настройка то у источника файлов?

                                Вот посмотри код, я вижу что проверка внутри объекта modMediaSource и там проверяется именно системная настройка upload_maxsize
                                  Wassi Wassinen
                                  01 марта 2024, 22:58
                                  0
                                  В настройках дополнения fileman есть опция fileman_mediasource. Там указываю источник файлов. В источнике файлов есть настройка upload_maxsize в которой указываю значение.
                                    Наумов Алексей
                                    04 марта 2024, 10:56
                                    0
                                    Не вижу в настройках источника файлов upload_maxsize.
                                    Да и судя по коды (ссылку давал выше) — оно не будет учитываться. Этот функционал, вероятно, нужно дописывать самостоятельно (имею ввиду в компоненте), как это сделано, к примеру, в галерее miniShop2
                                      Wassi Wassinen
                                      05 марта 2024, 10:18
                                      0
                                      У меня есть. Каких-то дополнений для этого не ставил :)

                                        Наумов Алексей
                                        05 марта 2024, 11:02
                                        0
                                        Её просто добавили руками (поэтому фиолетовая), никто не гарантирует, что она еще при этом должна работать) Среди стандартных настроек такой нет.
                                          Wassi Wassinen
                                          05 марта 2024, 12:25
                                          0
                                          Странно, руками не должны были добавлять.
                                          Алексей, добавить эту функциональность сможете для компонента? Или это сложно?
                                            Наумов Алексей
                                            05 марта 2024, 13:00
                                            0
                                            Это не очень то наверное сложно, просто не совсем понятно, насколько это нужно… в следующем обновлении может быть
                                              Wassi Wassinen
                                              05 марта 2024, 14:11
                                              0
                                              Расскажу пример. Контент менеджеры грузят картинки на сайте. Для этого общий размер файлов для источников картинок снижен до 800кб.
                                              А с помощью FileMan грузят документы — pdf, docx и т.д. Для источника FileMan нужно установить своё ограничение, чтобы могли грузить документы большего размера. И при этом — не увеличивать размер для остальных источников.

                                              Конечно, идеальным сценарием, было бы здорово иметь возможность выбирать источники файлов для каждого ресурса. Как это сделано в ms2gallery. Тогда получится совсем гибко. :)
                          Murashkin
                          30 сентября 2024, 14:59
                          0
                          Подскажите, как на феноме проверить на пустоту FileMan? Пробовал в плейсхолдер результат помещать, но не получилось.
                            Наумов Алексей
                            30 сентября 2024, 15:37
                            0
                            {set $files = $_modx->runSnippet('FileMan')}
                            {if $files}
                            ФАЙЛЫ
                            {/if}
                              Murashkin
                              08 октября 2024, 10:37
                              0
                              Спасибо!
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                            52