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
1 621
+12

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

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

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

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

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

                Смотри основные выдержки кода по закгрузке файлов:
                // получение и инициализация 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
                  0
                  Да, я наверное код привел из версии для MODX 3…

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

                    [[!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
                      0
                      Благодарю за ответ, Алексей! Могли бы вы уточнить ещё пару моментов, пожалуйста:

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

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

                      и

                      {'upload_maxsize'|option}

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

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

                          Только у меня почему-то не переопределяется параметр fileSize. Я указываю &fileSize = `10485760`, а [[++upload_maxsize]] всё равно берется из системных настроек, у меня по умолчанию 1048576000 байт, то есть 1000 Мб. Извините, я ещё плохо знаком с modx, поэтому не всё пока понятно(
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    28