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 сайте, возможны косяки, пишите о них в поддержку, поправим!
Комментарии: 28
Странно данные подтянулись)
В репозитории есть такая версия для MODX 3, номер версии старше, вот и подтянулось…
Добрый день. В последнем обновлении ошибка — при если не указывать параметры fileSize и filesCount, то загрузка не будет осуществляться, (по-умолчанию 0 — не ограничивается!) — не работает
Спасибо, проверю, если подтвердится — выпущу исправление!
И правда была проблема. Выложил обновление. Хотя, честно говоря, я бы без ограничения на количество файлов и их размер не стал оставлять загрузку файлов у себя на сайте)))
Ошибка в JS в версии 1.11.1-pl.
179 строчка:
179 строчка:
easyComm.notice.error(data.message);
response.message вместо data
Спасибо! Поправлю!
Приветствую!
Есть небольшой недочёт при сохранении имени файла.
/core/components/easycomm/model/easycomm/easycomm.class.php:376
Вместо:
И если например в «friendly_alias_trim_chars» указан символ земли «_», то сам файл сохраняется с дефисом вместо земли, а в базу данных сохраняется имя файла с землёй.
Есть небольшой недочёт при сохранении имени файла.
/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» указан символ земли «_», то сам файл сохраняется с дефисом вместо земли, а в базу данных сохраняется имя файла с землёй.
Спасибо за замечания… внесу корректировки!
может быть я глупый, но сделав всё по инструкции, прикрепление файлов так и не появилось…
где его искать на фронтенде?
где его искать на фронтенде?
Нужно обновить чанк tpl.ecForm (и убедиться, что используется именно он), и включить работу с файлами параметром files сниппета ecForm.
Правильно понимаю, что кастомный чанк на основе обновлённого tpl.ecForm нельзя использовать? Нужно именно в нем делать правки под себя и указывать именно его?
Параметр files в сниппете включен.
Хм… щас попробую…
Параметр files в сниппете включен.
Хм… щас попробую…
Да можно конечно, но там же добавилось новое поле для файлов + некоторые еще изменения.
Хм, при обновлении снял галочку для чанков и на них ориентировался… точно глупый)
Все ок, получилось, но есть проблема описанная Дмитрий Танцирев 11 мая 2021, 17:00
Все ок, получилось, но есть проблема описанная Дмитрий Танцирев 11 мая 2021, 17:00
Один момент мне показался не очевидным, а в чанке пример не нашел
Когда добавляешь поле для файлов
иначе плагин не верно парсит расширения файлов и в итоге они не добавляются.
Когда добавляешь поле для файлов
<input type="file" name="files[]"/>
не зависимо от filesCount = 1, поле должно передаваться массивом: files[],иначе плагин не верно парсит расширения файлов и в итоге они не добавляются.
Да, верно… ну можно чуть поправить попробовать, чтобы и так и так работало)
Сам файл загружается (в файлах он есть), а в сообщении во вкладке Файлы его нет. В журнале ошибка [easyComm] Can`t upload user file: path: file_err_ext_not_allowed
Решение найдено. Ошибка из-за использования плагина filetranslit. Удалил его и все заработало. Спасибо этой ветке modx.pro/solutions/19495
Вопрос к @Наумов Алексей, даже три.
1. В описании, да и в теме поста уточняется, что файлы это фотографии, а видео не загрузит?
2. И второй вопрос, если мне нужно грузить файлы не на свой сервер, а в облако, типа Amazon S3, загрузит? Я же так понимаю, загрузка работает через стандартные процессоры?
3. На удачу, с компонентом Swift не тестировали?
1. В описании, да и в теме поста уточняется, что файлы это фотографии, а видео не загрузит?
2. И второй вопрос, если мне нужно грузить файлы не на свой сервер, а в облако, типа Amazon S3, загрузит? Я же так понимаю, загрузка работает через стандартные процессоры?
3. На удачу, с компонентом Swift не тестировали?
Привет!
Да нет, можно любые файлы. В настройках есть список допустимых расширений файлов (ну и у источника файлов тоже есть такая же настройка). Есть проверка на макс. размер файла.
Насчет облаков не могу сказать, я не проверял.
Смотри основные выдержки кода по закгрузке файлов:
Swift уж тем более не проверял
Да нет, можно любые файлы. В настройках есть список допустимых расширений файлов (ну и у источника файлов тоже есть такая же настройка). Есть проверка на макс. размер файла.
Насчет облаков не могу сказать, я не проверял.
Смотри основные выдержки кода по закгрузке файлов:
// получение и инициализация 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 уж тем более не проверял
Да, я наверное код привел из версии для MODX 3…
В версии для MODX 2 все несоклько по другому…
Там вместе с $this->mediaSource->createContainer почему-то используется еще и $this->mediaSource->fileHandler->make и подозреваю что с облачным хранилищем это не сработает. Я сейчас уже не помню почему так…
В версии для MODX 2 все несоклько по другому…
Там вместе с $this->mediaSource->createContainer почему-то используется еще и $this->mediaSource->fileHandler->make и подозреваю что с облачным хранилищем это не сработает. Я сейчас уже не помню почему так…
Ладно, буду разбираться. В крайнем случае своё навелосипедю.
ec.js в 3-ей версии нет это так задумано или опечатка?
Добрый день! Уточните, пожалуйста, 2 вопроса:
Второй вопрос:
тут в мегабайтах указывается или в чем? как указать максимальный размер 10 Мб?
— 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);
?
добрый день!
[[!ecMessages?
&fileTypes = `jpg,jpeg,png,gif,webp`
&fileSize = `10485760`
]]
или на Fenom{'!ecMessages' | snippet : [
'fileTypes' => 'jpg,jpeg,png,gif,webp',
'fileSize' => '10485760'
]}
fileSize — в байтах
Благодарю за ответ, Алексей! Могли бы вы уточнить ещё пару моментов, пожалуйста:
В чанке ec_Form.tpl всё на fenom, это можно перевести на синтаксис modx?
Условие
и
Спасибо.
В чанке ec_Form.tpl всё на fenom, это можно перевести на синтаксис modx?
Условие
{if $files}formenctype="multipart/form-data"{/if}
и
{'upload_maxsize'|option}
Спасибо.
В каталоге
Насколько помню, запрашиваемое вами выглядит так:
/core/components/easycomm/elements/chunks/old
остались старые чанки на стандартном синтаксисе MODX, но да, они были созданы еще до того, как у компонента появилась возможность прикреплять файлы, поэтому эти чанки немного более старой версии.Насколько помню, запрашиваемое вами выглядит так:
[[+files:notempty=`formenctype="multipart/form-data"`]]
[[++upload_maxsize]]
Спасибо за помощь, Алексей!
Только у меня почему-то не переопределяется параметр fileSize. Я указываю &fileSize = `10485760`, а [[++upload_maxsize]] всё равно берется из системных настроек, у меня по умолчанию 1048576000 байт, то есть 1000 Мб. Извините, я ещё плохо знаком с modx, поэтому не всё пока понятно(
Только у меня почему-то не переопределяется параметр fileSize. Я указываю &fileSize = `10485760`, а [[++upload_maxsize]] всё равно берется из системных настроек, у меня по умолчанию 1048576000 байт, то есть 1000 Мб. Извините, я ещё плохо знаком с modx, поэтому не всё пока понятно(
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.