[UserFiles] - Файлы пользователя.
Компонент реализует функцию загрузки файлов пользователями сайта.

Компонент полностью переработан, изменения:
вкладки компонента
Рабочая область компонента доступна в нескольких местах.
— ресурс

Класс файлов — modResource. Доступна сортировка списку файла, типу и источнику медиа.
— пользователь
Класс файлов — modUser. аналогично вышеописанному.
— вкладка компонента

Доступна сортировка по списку файла, типу и источнику медиа, так же по классу и идентификатору.
основныые настройки компонента
сниппет ufForm
Вывод формы с загрузчиком файлов.

параметры сниппета
Для загрузки файлов с фронта пользователю нужно добавить политику UserFilesPolicy.
UserFile доступные поля
parent — идентификатор родителя
class — класс родителя
list — ключ списка файлов
source — идентификатор источника файлов
name — имя файла при загрузке
path — путь к файлу
file — имя файла после загрузки
type — тип файла
size — размер файла
createdon — дата время создания
createdby — идентификатор создателя
url — относительный путь к файлу
active — флаг активен
редактор изображений
В админке сайта доступен редактор изображений.

Можно отредактировать изображение и тут же сохранить.
копирование ссылок файлов
Согласно чанкам указанным в настройках компонента для файлов создаются ссылки.

При клике в буфер обмена будет помещена ссылка на файл и ее тут же можно вставить в текстовый редактор. Достаточно удобно для заполнения.
вывод формы
список файлов
Ранее был сниппет для вывода файлов. В данной версии его нет, так как не вижу в нем необходимости.
Вывести список файлов можно с помощью pdoResources
Пример, выводим список файлов для текущего ресурса и при соединяем превью с размером 222x222
выводим товары и присоединяем первую большую картинку и первую миниатюру
Можно вывести файлы в виде галереи.
В источник файлов добавлены настройки
{id} — id изображения.
{class} — class изображения.
{list} — list изображения.
{session} — session изображения.
{createdby} — createdby изображения.
{source} — source изображения.
{context} — context изображения.
{rand} — случайная строка.
{w} — ширина превью.
{h} — высота превью.
{q} — качество превью.
{f} — расширение превью.
Основное вроде все, если что дополню…
параметры dropzone
Указываются в виде json строки, параметр dropzone сниппета ufForm
Для вывода вкладки компонента на странице ресурса нужно указать соответствующий шаблон ресурса в настройке userfiles_working_templates
upd. 11.03.2016
Добавлен редактор на фронт.
ps. Важно! Компонент не совместим со старой версией, только для свежей установки.
В пакет встроена проверка, при попытке установить на старую версию вы получите ошибку.

Компонент полностью переработан, изменения:
- загрузчик dropzone
- загрузка файлов c админки сайта
- загрузка файлов c фронта сайта
- редактор изображений cropper
- динамический ресайз изображений
- копирование ссылок файлов
- ...
вкладки компонента
Рабочая область компонента доступна в нескольких местах.
— ресурс

Класс файлов — modResource. Доступна сортировка списку файла, типу и источнику медиа.
— пользователь
Класс файлов — modUser. аналогично вышеописанному.
— вкладка компонента

Доступна сортировка по списку файла, типу и источнику медиа, так же по классу и идентификатору.
основныые настройки компонента
- source_default — дефолтный источник файлов
- working_templates — Список id шаблонов через запятую, для которых нужно активировать вкладку с файлами
- chunk_link_file — Чанк ссылки на файл
- disable_for_user — Чанк ссылки на изображение
сниппет ufForm
Вывод формы с загрузчиком файлов.

параметры сниппета
- tplForm — Чанк формы
- class — Класс файла
- parent — Идентификатор родителя
- list — Имя списка. К нему будет привязан файл
- active — Показывать только активные файлы.
- source — Идентификатор источника медиа для загрузки файлов. По умолчанию будет использован источник, указанный в системной настройке «userfiles_source_default».
- anonym — Разрешить загрузку файлов анонимам
- sortby — Поле сортировки.
- sortdir — Направление сортировки.
- objectName — Имя объекта для инициализации в подключаемом javascript. По умолчанию «UserFilesForm».
- frontendCss — Файл с css стилями для подключения на фронтенде.
- frontendJs — Файл с javascript для подключения на фронтенде.
- jqueryJs — Файл с Jquery для подключения на фронтенде.
- actionUrl — Коннектор для обработки ajax запросов.
- toPlaceholder — Если указан этот параметр, то результат будет сохранен в плейсхолдер, вместо прямого вывода на странице.
- dropzone — Закодированный в JSON массив с параметрами «Dropzone»
- modal — Закодированный в JSON массив с параметрами «modal»
Для загрузки файлов с фронта пользователю нужно добавить политику UserFilesPolicy.
UserFile доступные поля
parent — идентификатор родителя
class — класс родителя
list — ключ списка файлов
source — идентификатор источника файлов
name — имя файла при загрузке
path — путь к файлу
file — имя файла после загрузки
type — тип файла
size — размер файла
createdon — дата время создания
createdby — идентификатор создателя
url — относительный путь к файлу
active — флаг активен
редактор изображений
В админке сайта доступен редактор изображений.

Можно отредактировать изображение и тут же сохранить.
копирование ссылок файлов
Согласно чанкам указанным в настройках компонента для файлов создаются ссылки.

При клике в буфер обмена будет помещена ссылка на файл и ее тут же можно вставить в текстовый редактор. Достаточно удобно для заполнения.
вывод формы
[[!ufForm?
&tplForm=`uf.form.sort`
&list=`image`
&anonym=`1`
&dropzone=`{"maxFilesize":2,"maxFiles":3,"acceptedFiles":".jpg, .jpeg, .gif, .png","template":"edit"}`
]]список файлов
Ранее был сниппет для вывода файлов. В данной версии его нет, так как не вижу в нем необходимости.
Вывести список файлов можно с помощью pdoResources
Пример, выводим список файлов для текущего ресурса и при соединяем превью с размером 222x222
[[!pdoResources?
&limit=`10`
&showLog=`0`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`rank`
&sortdir=`ASC`
&tpl=`@INLINE
<div class="item">
<a href="[[+url]]" target="_blank">[[+name]] - [[+size]]</a>
</div>`
&where=`{
"UserFile.parent":[[*id]],
"UserFile.createdby":[[!+modx.user.id]]
}`
&leftJoin=`{
"Thumb": {
"class": "UserFile",
"on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE '%w\":222,\"h\":222%'"
}
}`
&select=`{
"UserFile": "*",
"Thumb": "Thumb.url as thumb"
}`
]]список файлов пользователя[[!pdoResources?
&limit=`10`
&showLog=`0`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`rank`
&sortdir=`ASC`
&tpl=`@INLINE
<div class="item">
<a href="[[+url]]" target="_blank"><img src="[[+thumb]]" title="[[+name]]"></a>
</div>`
&where=`{
"UserFile.class":"modUser",
"UserFile.parent":[[!+modx.user.id]],
"UserFile.createdby":[[!+modx.user.id]]
}`
&leftJoin=`{
"Thumb": {
"class": "UserFile",
"on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE '%w\":120,\"h\":90%'"
}
}`
&select=`{
"UserFile": "*",
"Thumb": "Thumb.url as thumb"
}`
]]работа с msProductsвыводим товары и присоединяем первую большую картинку и первую миниатюру
[[!pdoPage?
&showLog=`0`
&element=`msProducts`
&tpl=`products.files`
&loadModels=`UserFiles`
&leftJoin=`{
"File": {
"class": "UserFile",
"on": "File.parent = msProduct.id AND File.rank = 0"
},
"Thumb": {
"class": "UserFile",
"on": "Thumb.parent = File.id AND Thumb.properties LIKE '%w\":120,\"h\":90%'"
}
}`
&select=`{
"File": "File.url as ufile",
"Thumb": "Thumb.url as uthumb"
}`
]]галерея файловМожно вывести файлы в виде галереи.
<link rel="stylesheet" href="https://yandex.st/jquery/fancybox/2.1.4/jquery.fancybox.min.css" type="text/css" media="screen" />
<script src="https://yandex.st/jquery/fancybox/2.1.4/jquery.fancybox.min.js" type="text/javascript" ></script>
<script>
$(document).ready(function() {
$('.fancybox').fancybox();
});
</script>
<div class="row">
[[!pdoResources?
&showLog=`0`
&limit=`10`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`parent,rank`
&sortdir=`ASC`
&tpl=`@INLINE
<a href="[[+url]]" class="fancybox" rel="gallery" target="_blank"><img src="[[+thumb]]" /></a>
`
&where=`{
"UserFile.parent":[[*id]],
"UserFile.list":"image"
}`
&leftJoin=`{
"Thumb": {
"class": "UserFile",
"on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE '%w\":120,\"h\":90%'"
}
}`
&select=`{
"UserFile": "*",
"Thumb": "Thumb.url as thumb"
}`
]]
</div>источник файловВ источник файлов добавлены настройки
- fileName — маска имени файла
- thumbnailName — маска имени превью изображения
- imageThumbnails — массив с указанием превью
{id} — id изображения.
{class} — class изображения.
{list} — list изображения.
{session} — session изображения.
{createdby} — createdby изображения.
{source} — source изображения.
{context} — context изображения.
{rand} — случайная строка.
{w} — ширина превью.
{h} — высота превью.
{q} — качество превью.
{f} — расширение превью.
Основное вроде все, если что дополню…
параметры dropzone
Указываются в виде json строки, параметр dropzone сниппета ufForm
&dropzone=`{"maxFilesize":2,"maxFiles":3,"acceptedFiles":".jpg, .jpeg, .gif, .png","template":"edit"}`- maxFilesize — максимальный размер файла
- maxFiles — максимальное кол-во файлов
- acceptedFiles — тип файлов разрешенных к загрузке
Для вывода вкладки компонента на странице ресурса нужно указать соответствующий шаблон ресурса в настройке userfiles_working_templates
upd. 11.03.2016
Добавлен редактор на фронт.
ps. Важно! Компонент не совместим со старой версией, только для свежей установки.
В пакет встроена проверка, при попытке установить на старую версию вы получите ошибку.
Комментарии: 189
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
И зря убрали сниппет для вывода файлов — слишком сложная для простых смертных конструкция джойнов через pdoResources.
По сниппету не хочу писать чтоб лишь бы было. Функционально продумаю все варианты, посмотрю.
По тегам не ясно, если есть желание описать как это по твоему должно работать — trello.com/b/MLRzAKLN/userfiles
modx.com/extras/package/imageplustvinput
может я не прав, но мне было бы очень тяжело пользоваться компонентом, позволяющим грузить картинки или файлы, но не позволяющим их сортировать
Чтобы активировать сортировку нужно добавить форме атрибут data-sorting=1
Обновился.Теперь :(
Чукча не читатель. Чукча — писатель: ))) Дочитал заметку до конца.
Добавил фикс, теперь можно деинсталировать старый пакет и установить новый — должно все работать.
Загружу чуть позже в магазин, сейчас что то не получается…
Я по старинке руками...)
Пытаюсь через Selectel настроить как было на старой версии.
И в настройках медиа пропали настройки изображения, размеров превью.
Спасибо!
Отличный компонент. Отличная поддержка отнявшая у тебя кучу времени (надеюсь и на пользу компоненту, а не только мне))).
И кстати компонент стал очень даже симпатичным с последним обновлением, внешне.
Конечно все на пользу компоненту )))
Можно протестировать тут location.vgrish.ru/index.php?id=24
Как вот эту часть
Заменить на вывод превьюшек? Текстовым списком картинки выводить не очень хорошо. А у меня получается только превью+картинки вывести.
222x222
в чанке указываем как
Но если смотреть код сгенерированной странички, то там вместо 2 ссылок, делается 4.
Сначала правильная ссылка а потом сразу вторая с пустым img
Посмотрел, у вас такого не происходит: ( Где то я опять накосячил.
будет в итоге так
можно добавить ссылкам класс
подключить fancybox к примеру
и получите работающую галерею, пример тут
location.vgrish.ru/index.php?id=24
Подобно как сделано тут: modx.pro/solutions/7234-tickets-auto-orientation-when-loading/
Напишите на почту, приложите снимки с описанием того где какой поворот изображения. Я попробую сделать.
Спасибо!
Если что то не выходит — можно обратиться в ТП.
Надеюсь автор поправит этот неприятный момент в новой версии.
Затем сделать подгрузку класса родителя и списка родителей.
Мне нужно чтобы пользователи загружали фотографии, при этом для каждого пользователя должна создаваться своя папка, с двумя подпапками, без доступа к другим папкам. Так получится штатными методами?
Для чего:
Я использую UserFiles для прикрепления изображений к комментариям Tickets со следующей логикой:
— при первичной загрузки (до публикации комментария), изображения подцепляются к пользователю (modUser) в list вида «comment-(айди ресурса)»
— при публикации комментария плагин переопределяет class изображений на modResource (чтобы при удалении или любых других действий с ресурсом, эффект распространялся и на изображения в комментариях) и заменяю list на «comment-(айди комментария)»
— при вызове TicketComments цепляю изображения по Thumbs.list = TicketComment.id
Все работает хорошо, за исключением того, что в бэкэнде в селекторе выбора list начинает храниться огромное множество вариантов вида «comment-id».
Пока решил проблему, расширив стандартную таблицу UserFiles, но было бы очень здорово, если бы из коробки была возможность теггирования или любых других способов дополнительной персонализации изображения.
[[!pdoResources?
&limit=`25`
&showLog=`0`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`parent,rank`
&sortdir=`ASC`
&tpl=`@INLINE
&where=`{
«UserFile.parent»:[[*id]],
«UserFile.list»:«img»
}`
]]
может кто знает как помочь
[[!ufform?
&dropzone=`{«maxFilesize»:2,«maxFiles»:1,«acceptedFiles»:".jpg, .jpeg, .gif, .png",«template»:«edit»}`
&classFile=`modresource`
&list =`priv`
&parent=`[[+id]]`
&onlyCreatedby=`1`
]]
и файл загружается в лист priv и в папку article/id а не modresource/id
modx.pro/search?query=phpthumb+вотермарк
[[!pdoResources?
&limit=`25`
&showLog=`0`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`parent,rank`
&sortdir=`ASC`
&tpl=`@INLINE
alt="[[+name]]" src="[[+url:phpthumbof=`&w=744&h=370&zc=1&q=60&fltr[]=wmi|/path/to/image.png|BR|70|5|5|0`]]" data-image="[[+url]]" data-description="[[+name]]"`
&where=`{
«UserFile.parent»:[[*id]],
«UserFile.list»:«img»,
«UserFile.class»:«modResource»
}`
]]
— попробуйте создать обычный чанк а не INLINE
например
Или объясните подробнее что необходимо.
код чанки Planthotoirrby
там где url выводится путь к файлу а где md5 там нужно чтобы выводился md5 кеш файла.
АнтонНужно чтобы к товару добавлялась только ссылка на файл.
АнтонА в товар приходила только ссылка на файл.
Желательно с размером.
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/xpdo.class.php: 1318) Could not get table class for class: modresource
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/xpdo.class.php: 1287) Could not get table name for class: modresource
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/om/xpdoobject.class.php: 240) Error 42000 executing statement:
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `modresource` WHERE `modresource`.`id` = 3129' at line 1
)
а почему файлы грузятся в article/id
[[!ufform?
&class=`modresource`
&list =`plan`
&parent=`[[+id]]`
&onlyCreatedby=`1`
&dropzone=`{«maxFilesize»:4,«maxFiles»:5,«acceptedFiles»:".jpg, .jpeg, .gif, .png",«template»:«edit»}`
]]
то грузится норм но выдает ошибку
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/xpdo.class.php: 1318) Could not get table class for class: modresource
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/xpdo.class.php: 1287) Could not get table name for class: modresource
[2016-12-03 17:59:28] (ERROR @ /home/cyzja/www/phpbbfor/core/xpdo/om/xpdoobject.class.php: 240) Error 42000 executing statement:
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `modresource` WHERE `modresource`.`id` = 3129' at line 1
)
может ее как-то можно поправить?
но сортирует с шагом в одну фото то есть первую фото я не могу поставить 10 и на оборот в чем может быть проблема?
Спасибо!
[[!ufForm?
&tplForm=`uploadForm`
&class=`UserFile`
&list=`upload`
&anonym=`1`
&dropzone=`{«maxFilesize»:3,«maxFiles»:1,«acceptedFiles»:".zip,.rar"}`
]]
При открытии страницы с формой выдает ошибку «Доступ запрещен». Уже все перерыл.
все…
Можно плагин на событие OnBeforeEmptyTrash
и в нем
Пишите в ТП разберемся.
Пишите пожалуйста в ТП
Приложите доступы к админке сайта и ссылку на чанк/ шаблон вызова.
Спасибо!
Из примера вставил сниппет
Юзер авторизован в кабинете.
На выходе ничего не выводится, ошибок нет. Что я делаю не так?
Спасибо!
Заранее спасибо!
Почему данная конструкция не работает через вызов Fenom?
Если убрать то вызов отрабатывает
Вызвал его на странице — получил 500 ошибку.
потому как сам я данный функционал не тестировал и не пользую, мне хватает стандартной галереи, но в ТП просили добавить данный функционал. Как функционал обкатается так и будет анонс и описание.
пишите в ТП — разберемся.
В ТП когда куплю, сейчас проверяю функционал, если подойдёт для пользовательской галереи.
Попробовал на тестовом хостинге — пишет: Вы не можете загрузить больше файлов.
Также при загрузке файлов больше 1мб выводит ошибку независимо от данных в настройке maxUploadSize: Файл слишком большой (1.91MiB). Максимальный размер: 1MiB.
В статье этот параметр не объясняется.
Вы можете добавить по аналогии свои шаблоны отображения…
Аналогично можно задать шаблон и для модалки, например редактировать описание к картинке
Пишите в ТП. Приложите доступы к админке и ссылку где наблюдается проблема.
Спасибо.
Но я понял почему не работало перетаскивание — Во время обновления произошло переписывание чанка uf.form — отличается он от предыдущего лишь этой строкой
Раньше было Подставил в новый код data-sorting=«1» и перетаскивание заработало.
Но Проблема с тем что не устанавливается порядок файлов осталась — то есть он меняется как себе хочет…
Этот список документов выводится через pdoResources. Делаю фильтрацию для этих документов.
Подскажите, как через where отфильтровать по наличию/отсутствию файлов?
Что-нибудь вроде:
Или нет такой возможности?
Однако, если вписать
то выводит те документы в которых есть файлы, но каждый такой документ выводит столько раз, сколько в нем этих файлов, т. е. не по 1 разу
Благодарю за помощь
Не работает в мозилле. В хроме работает…
Вызов
в консоли ошибка
ReferenceError: _createClass is not defined
_createClass(Emitter, [{
ругается на assets/components/themebootstrap/js/jquery.min.js line 2 > eval
и этак:
Видимо, команда должна быть не size. А какая?))
передаете в вызов сниппета в виде json строки.
Хоть ключевые слова какие-то пожалуйста черканите, а то получается, что тебе прокладку в кране надо сменить, а тебе техплан водоснабжения дома суют))
Но у меня назрел еще один важный вопрос. Мне надо откропать именно превьюху. То есть у меня все миниатюры в галлерее — горизонтальные, а вертикальные оригиналы кропаются автоматом и там такого лешего в итоге накропано, что хоть стой хоть падай. Куда глядеть, что б настроить это дело?
Спасибо
по существу вопроса — я думаю нельзя задать фиксированный размер для кропа, можно задать соотношения сторон aspectRatio.
Если необходима картинка с точными параметрами задай параметры для превью как тебе нужно.
Имеется ввиду медиасорс и настройка превью там.
Плагин на UserFilesOnAfterFileUpload
Можно ли автоматически ресайзить изображения (под определенный размер) при загрузке с фронта и удалять оригиналы?
Нужно чтобы пользователи могли загружать изображения до 10Мб, а на сервере хранились обрезанные и уменьшенные 1024х768.
Плюс когда пытаешься добавить описание к большому изображению, то кроппер глючит и описание не сохраняется.
А то после редактирования описания размер изображения с 0.2Мб увеличивается до 1.2Мб
yadi.sk/i/hQg_tWSl3Z8Zu3
У меня сейчас так:
Нашли проблему в скрипте загрузки — двойной корень.
Как исправить?
Загружаем картинки через файловую панель, всё хорошо — файл загружается и сжимается, а через userfiles выдаёт ошибку.
Вывожу картинки вот так:
[[!pdoResources?
&limit=`0`
&showLog=`0`
&class=`UserFile`
&loadModels=`UserFiles`
&sortby=`parent,rank`
&sortdir=`ASC`
&tpl=`@INLINE
&where=`{
«UserFile.parent»:[[*id]],
«UserFile.list»:»img"
}`
]]
но после основных картинок выводятся тумбинашки. Как от них избавиться?
Можно добавить в условие
У меня задача, нужно создать сайт, для фирмы которая занимается проведением мероприятий и лекториев. Нужно чтобы на сайте лекторы могли загружать c фронта файлы, и другие пользователи это могли скачать.
Вопрос: ваш плагин можно настроить таким образом, чтобы например можно было создать запись в Tickets, и лектора могли через фронт прикреплять файлы именно к этой записи, а не все шло в одну папку. Например если страница с id 90 — все шло в папку на ftp: events/90?
подскажите как можно исправить, куда копать?
сейчас вызываю так:
тз:
1) Оптимизация изображения при загрузке в ресурс
2) Генерация случайного название или свой префикс при загрузке изображения в ресурс
3) Обрезка изображения при загрузке в ресурс
4) Удаления файла изображения при удалении из ресурса
5) Удаления изображений при удалении ресурса
6) Пакетная загрузка изображений(необязательно)
Помогите, выводится изображение из рандомного ресурса. Как исправить?
Следующий код:
Изменил некоторые параметры генерации превью изображений, а страниц с галереями у меня несколько. Переходить в каждую и обновлять превью слишком долго, а запустить скрипт в консоли было бы намного быстрее и удобнее.
И второй вопрос — при выводе общей кучи от всех пользователей какое условие надо дописать в вызов pdoResources, чтобы отключенные не выводились?
нужно задать в вызове ufForm
А как и где нужный профиль указывать? Пробовал в json &drozone и в &modal указать как — никаких изменений не заметил
на фронте этого функционала нет.
можно только указать настройки кроппера по дефолту в виде json
Вероятно тогда можно попробовать чтоб заработало.
У каждого файла есть поле description, используйте его.
Вызов стандартный
в тиккетс в &allowedFields добавил ufForm, вместо загрузки файлов выводит текст: