easyComm 1.11.0. Прикрепление файлов (фотографий)

Привет!

Небольшой анонс новых возможностей easyComm с версии 1.11.0-pl.

Теперь вы можете дать возможность пользователям ваших сайтов прикрепить к отзывам файлы/фото.

Конечно я чуть привираю, вы и раньше могли сделать вот так modx.pro/components/5707 (создать для каждого файла отдельное поле, сделать плагин для сохранения файла, настроить вывод в админке). Но это не очень понятно/удобно и сложно в целом.

Пора чуть поправить ситуацию!

Я не стал в модуль для отзывов запихивать мощную галерею, решил пойти по более простому пути.

Итак, к сниппету ecForm были добавлены параметры:
— files (bool) — включить возможность загрузки файлов;
— fileTypes (string) — типы разрешенных файлов (по-умолчанию jpg,jpeg,png,gif,webp);
— fileSize (int) — ограничение на размер каждого файла (по-умолчанию 0 — не ограничивается!);
— filesCount (int) — ограничение на количество файлов (по-умолчанию 0 — не ограничивается!).

Все загруженные файлы сохраняются в свой новый Источник Файлов (media source), файлы можно разбивать по папкам (см. системные настройки компонента ec_files_source, ec_files_path).

Информация о загруженных файлах храниться в поле files у сообщения в формате json… да, пока не увидел смысла заводить отдельную таблицу для этих целей…

Ну и наконец-то добавлено отображение файлов в админке и возможность их удаления:


При обновлении компонента учтите, что обновились чанки tpl.ecForm и tpl.ecMessages.Row. Либо обновляйте их, либо посмотрите изменения соответствующих файлов в /core/components/easycomm/elements/chunks/ и скорректируйте свои чанки.

p.s. Я тестировал только на dev сайте, возможны косяки, пишите о них в поддержку, поправим!
Наумов Алексей
Наумов Алексей
22 апреля 2021, 11:26
modx.pro
4 647
Реклама

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

Александр
Александр Старожил
26 апреля 2021, 14:46
Странно данные подтянулись)
    Наумов Алексей
    Наумов Алексей Администратор
    26 апреля 2021, 14:48
    В репозитории есть такая версия для MODX 3, номер версии старше, вот и подтянулось…
    Алексей
    Алексей Старожил
    26 апреля 2021, 19:47
    Добрый день. В последнем обновлении ошибка — при если не указывать параметры fileSize и filesCount, то загрузка не будет осуществляться, (по-умолчанию 0 — не ограничивается!) — не работает
      Наумов Алексей
      Наумов Алексей Администратор
      27 апреля 2021, 08:59
      Спасибо, проверю, если подтвердится — выпущу исправление!
        Наумов Алексей
        Наумов Алексей Администратор
        27 апреля 2021, 12:05
        И правда была проблема. Выложил обновление. Хотя, честно говоря, я бы без ограничения на количество файлов и их размер не стал оставлять загрузку файлов у себя на сайте)))
        Денис
        Денис Старожил
        07 мая 2021, 12:29
        Ошибка в JS в версии 1.11.1-pl.
        179 строчка:
        easyComm.notice.error(data.message);
        response.message вместо data
        Дмитрий Танцирев
        11 мая 2021, 17:00
        Приветствую!
        Есть небольшой недочёт при сохранении имени файла.

        /core/components/easycomm/model/easycomm/easycomm.class.php:376

        Вместо:
        $filename = $this->generateRandomName().".".$ext;
        Надо:
        $filename = $this->modx->filterPathSegment($this->generateRandomName()).".".$ext;
        Иначе «$this->mediaSource->uploadObjectsToContainer» сохраняет файл обработав его имя функцией «filterPathSegment», тем самым удаляет из имени файла символы которые указаны в системной настройке «friendly_alias_trim_chars», а в базу сохраняется необработанное имя файла.

        И если например в «friendly_alias_trim_chars» указан символ земли «_», то сам файл сохраняется с дефисом вместо земли, а в базу данных сохраняется имя файла с землёй.
          Наумов Алексей
          Наумов Алексей Администратор
          11 мая 2021, 17:05
          Спасибо за замечания… внесу корректировки!
          Andrew
          Andrew Старожил
          11 сентября 2021, 05:24
          может быть я глупый, но сделав всё по инструкции, прикрепление файлов так и не появилось…
          где его искать на фронтенде?
            Наумов Алексей
            Наумов Алексей Администратор
            13 сентября 2021, 10:04
            Нужно обновить чанк tpl.ecForm (и убедиться, что используется именно он), и включить работу с файлами параметром files сниппета ecForm.
              Andrew
              Andrew Старожил
              13 сентября 2021, 11:07
              Правильно понимаю, что кастомный чанк на основе обновлённого tpl.ecForm нельзя использовать? Нужно именно в нем делать правки под себя и указывать именно его?
              Параметр files в сниппете включен.
              Хм… щас попробую…
                Наумов Алексей
                Наумов Алексей Администратор
                13 сентября 2021, 11:09
                Да можно конечно, но там же добавилось новое поле для файлов + некоторые еще изменения.
                  Andrew
                  Andrew Старожил
                  21 сентября 2021, 14:26
                  Хм, при обновлении снял галочку для чанков и на них ориентировался… точно глупый)
                  Все ок, получилось, но есть проблема описанная Дмитрий Танцирев 11 мая 2021, 17:00
            Greza
            Greza Старожил
            21 января 2022, 14:28
            Один момент мне показался не очевидным, а в чанке пример не нашел
            Когда добавляешь поле для файлов
            <input type="file" name="files[]"/>
            не зависимо от filesCount = 1, поле должно передаваться массивом: files[],
            иначе плагин не верно парсит расширения файлов и в итоге они не добавляются.
              Наумов Алексей
              Наумов Алексей Администратор
              21 января 2022, 14:44
              Да, верно… ну можно чуть поправить попробовать, чтобы и так и так работало)
              newbmod
              newbmod Старожил
              29 июля 2022, 15:50
              Сам файл загружается (в файлах он есть), а в сообщении во вкладке Файлы его нет. В журнале ошибка [easyComm] Can`t upload user file: path: file_err_ext_not_allowed
                newbmod
                newbmod Старожил
                29 июля 2022, 18:03
                Решение найдено. Ошибка из-за использования плагина filetranslit. Удалил его и все заработало. Спасибо этой ветке modx.pro/solutions/19495
                Артур Шевченко
                Артур Шевченко Старожил
                14 сентября 2022, 00:18
                Вопрос к @Наумов Алексей, даже три.
                1. В описании, да и в теме поста уточняется, что файлы это фотографии, а видео не загрузит?
                2. И второй вопрос, если мне нужно грузить файлы не на свой сервер, а в облако, типа Amazon S3, загрузит? Я же так понимаю, загрузка работает через стандартные процессоры?
                3. На удачу, с компонентом Swift не тестировали?
                  Наумов Алексей
                  Наумов Алексей Администратор
                  14 сентября 2022, 10:04
                  Привет!

                  Да нет, можно любые файлы. В настройках есть список допустимых расширений файлов (ну и у источника файлов тоже есть такая же настройка). Есть проверка на макс. размер файла.

                  Насчет облаков не могу сказать, я не проверял.

                  Смотри основные выдержки кода по закгрузке файлов:
                  // получение и инициализация mediaSource
                  $this->mediaSource = modMediaSource::getDefaultSource($this->modx, $this->modx->getOption('ec_files_source'));
                  $this->mediaSource->set('ctx', $context);
                  $this->mediaSource->initialize();
                  ...
                  // проверка policy
                  if (!$this->mediaSource->checkPolicy('create')) {...}
                  ...
                  // формирование пути и создание каталога
                  $this->mediaSource->createContainer($internalPath, '');
                  ..
                  // загрузка файла
                  $uploadResult = $this->mediaSource->uploadObjectsToContainer(
                      $internalPath,
                      array(
                          array_merge($file, array('name' => $filename))
                      )
                  );
                  на первый взгляд все выглядит корректно)))
                  Swift уж тем более не проверял
                    Наумов Алексей
                    Наумов Алексей Администратор
                    14 сентября 2022, 10:07
                    Да, я наверное код привел из версии для MODX 3…

                    В версии для MODX 2 все несоклько по другому…
                    Там вместе с $this->mediaSource->createContainer почему-то используется еще и $this->mediaSource->fileHandler->make и подозреваю что с облачным хранилищем это не сработает. Я сейчас уже не помню почему так…
                      Артур Шевченко
                      Артур Шевченко Старожил
                      14 сентября 2022, 11:27
                      Ладно, буду разбираться. В крайнем случае своё навелосипедю.
                  Stepan
                  Stepan Старожил
                  02 мая 2023, 12:04
                  ec.js в 3-ей версии нет это так задумано или опечатка?
                    Дмитрий
                    Дмитрий Старожил
                    13 августа 2023, 14:50
                    Добрый день! Уточните, пожалуйста, 2 вопроса:

                    — fileTypes (string) — типы разрешенных файлов (по-умолчанию jpg,jpeg,png,gif,webp);
                    Как правильно перечислить типы файлов?

                    $data['file_types'] = $modx->getOption('fileTypes', $scriptProperties, 'jpg,jpeg,png');
                    ?

                    Второй вопрос:

                    — fileSize (int) — ограничение на размер каждого файла (по-умолчанию 0 — не ограничивается!);

                    тут в мегабайтах указывается или в чем? как указать максимальный размер 10 Мб?
                    $data['file_size'] = $modx->getOption('fileSize', $scriptProperties, 10);
                    ?
                      Наумов Алексей
                      Наумов Алексей Администратор
                      14 августа 2023, 09:10
                      добрый день!

                      [[!ecMessages?
                      &fileTypes = `jpg,jpeg,png,gif,webp`
                      &fileSize = `10485760`
                      ]]
                      или на Fenom
                      {'!ecMessages' | snippet : [
                      	'fileTypes' => 'jpg,jpeg,png,gif,webp',
                      	'fileSize' => '10485760'
                      ]}
                      fileSize — в байтах
                        Дмитрий
                        Дмитрий Старожил
                        14 августа 2023, 11:37
                        Благодарю за ответ, Алексей! Могли бы вы уточнить ещё пару моментов, пожалуйста:

                        В чанке ec_Form.tpl всё на fenom, это можно перевести на синтаксис modx?

                        Условие
                        {if $files}formenctype="multipart/form-data"{/if}

                        и

                        {'upload_maxsize'|option}

                        Спасибо.
                          Наумов Алексей
                          Наумов Алексей Администратор
                          15 августа 2023, 09:05
                          В каталоге
                          /core/components/easycomm/elements/chunks/old
                          остались старые чанки на стандартном синтаксисе MODX, но да, они были созданы еще до того, как у компонента появилась возможность прикреплять файлы, поэтому эти чанки немного более старой версии.

                          Насколько помню, запрашиваемое вами выглядит так:
                          [[+files:notempty=`formenctype="multipart/form-data"`]]
                          
                          [[++upload_maxsize]]
                            Дмитрий
                            Дмитрий Старожил
                            15 августа 2023, 18:14
                            Спасибо за помощь, Алексей!

                            Только у меня почему-то не переопределяется параметр fileSize. Я указываю &fileSize = `10485760`, а [[++upload_maxsize]] всё равно берется из системных настроек, у меня по умолчанию 1048576000 байт, то есть 1000 Мб. Извините, я ещё плохо знаком с modx, поэтому не всё пока понятно(
                      Дмитрий
                      04 июня 2026, 17:31
                      Здравствуйте! Помогите, пожалуйста, разобраться с проблемой. На сайте также используется пакет cityField. Если пользователь оставляет отзыв в товаре находясь в городе по умолчанию (Новосибирск), то отзыв прилетает с файлом, а если переключиться на другой город то файл уже не долетает. Никак не могу решить проблему.
                        Наумов Алексей
                        Наумов Алексей Администратор
                        05 июня 2026, 09:38
                        Я не знаком с cityField. Смотрите, чем отличаются формы и запросы на сервер. Если разные контексты — то проверьте, как настроены источники файлов.
                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                        30