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 сайте, возможны косяки, пишите о них в поддержку, поправим!
Небольшой анонс новых возможностей 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 сайте, возможны косяки, пишите о них в поддержку, поправим!
Комментарии: 30
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
179 строчка: response.message вместо data
Есть небольшой недочёт при сохранении имени файла.
/core/components/easycomm/model/easycomm/easycomm.class.php:376
Вместо:
Надо:
Иначе «$this->mediaSource->uploadObjectsToContainer» сохраняет файл обработав его имя функцией «filterPathSegment», тем самым удаляет из имени файла символы которые указаны в системной настройке «friendly_alias_trim_chars», а в базу сохраняется необработанное имя файла.
И если например в «friendly_alias_trim_chars» указан символ земли «_», то сам файл сохраняется с дефисом вместо земли, а в базу данных сохраняется имя файла с землёй.
где его искать на фронтенде?
Параметр files в сниппете включен.
Хм… щас попробую…
Все ок, получилось, но есть проблема описанная Дмитрий Танцирев 11 мая 2021, 17:00
Когда добавляешь поле для файлов
не зависимо от filesCount = 1, поле должно передаваться массивом: files[],
иначе плагин не верно парсит расширения файлов и в итоге они не добавляются.
1. В описании, да и в теме поста уточняется, что файлы это фотографии, а видео не загрузит?
2. И второй вопрос, если мне нужно грузить файлы не на свой сервер, а в облако, типа Amazon S3, загрузит? Я же так понимаю, загрузка работает через стандартные процессоры?
3. На удачу, с компонентом Swift не тестировали?
Да нет, можно любые файлы. В настройках есть список допустимых расширений файлов (ну и у источника файлов тоже есть такая же настройка). Есть проверка на макс. размер файла.
Насчет облаков не могу сказать, я не проверял.
Смотри основные выдержки кода по закгрузке файлов:
на первый взгляд все выглядит корректно)))
Swift уж тем более не проверял
В версии для MODX 2 все несоклько по другому…
Там вместе с $this->mediaSource->createContainer почему-то используется еще и $this->mediaSource->fileHandler->make и подозреваю что с облачным хранилищем это не сработает. Я сейчас уже не помню почему так…
Как правильно перечислить типы файлов?
?
Второй вопрос:
тут в мегабайтах указывается или в чем? как указать максимальный размер 10 Мб?
?
или на Fenom
fileSize — в байтах
В чанке ec_Form.tpl всё на fenom, это можно перевести на синтаксис modx?
Условие
и
Спасибо.
остались старые чанки на стандартном синтаксисе MODX, но да, они были созданы еще до того, как у компонента появилась возможность прикреплять файлы, поэтому эти чанки немного более старой версии.
Насколько помню, запрашиваемое вами выглядит так:
Только у меня почему-то не переопределяется параметр fileSize. Я указываю &fileSize = `10485760`, а [[++upload_maxsize]] всё равно берется из системных настроек, у меня по умолчанию 1048576000 байт, то есть 1000 Мб. Извините, я ещё плохо знаком с modx, поэтому не всё пока понятно(