Перевод оригинальной статьи Using resource-specific mediasource and multifile-uploader with MIGX. Немного переделана конфигурация для MIGX.
Создаем источник файлов
Открываем в верхнем меню пункт «Медиа» — «Источники файлов». Нажимаем «Создать новый источник файлов»:
- Имя: ResourceMediaPath
- Тип источника файлов: Файловая система
Сохраняем, в списке находим только что созданный источник, жмем правую кнопку, выбираем «Редактировать». Необходимо отредактировать поля «basePath» и «baseUrl», установить им значение:
[[migxResourceMediaPath? &pathTpl=`assets/resourceimages/{id}/` &createFolder=`1`]]
Необходимо в /assets/ создать директорию resourceimages и установить права на запись.
Создаем TV параметр
- Вкладка «Общая информация»
- Имя — resourcealbum
- Подпись — Галерея
- Вкладка «Параметры ввода»
- Тип ввода — migx
- Конфигурации — resourcealbum
- Вкладка «Доступно для шаблонов»
- Отмечаем шаблоны, в которых будет использоваться галерея.
- Вкладка «Источники файлов»
- Для нужного контекста (web по умолчанию) устанавливаем созданный в первом шаге источник файлов ResourceMediaPath (двойным кликом по соответствующему полю).
Создаем конфигурацию для MIGX
В верхнем меню переходим в «Приложения» — «MIGX». Переключаемся на вкладку «MIGX» и нажимаем «Добавить элемент». В поле «Name» пишем resourcealbum, нажимаем кнопку «Выполнено». В списке находим созданную конфигурацию, нажимаем правой кнопкой, выбираем «Экспорт/импорт», в текстовое поле вставляем следующий код:
{ "formtabs":[ { "MIGX_id":71, "caption":"Изображение", "print_before_tabs":"0", "fields":[ { "field":"title", "caption":"Заголовок", "MIGX_id":327, "pos":1 }, { "MIGX_id":329, "field":"description", "caption":"Описание", "description":"", "description_is_code":"0", "inputTV":"", "inputTVtype":"", "validation":"", "configs":"", "restrictive_condition":"", "display":"", "sourceFrom":"config", "sources":"", "inputOptionValues":"", "default":"test", "useDefaultIfEmpty":"0", "pos":2 }, { "MIGX_id":425, "field":"image", "caption":"Изображение", "description":"", "description_is_code":"0", "inputTV":"", "inputTVtype":"image", "validation":"", "configs":"", "restrictive_condition":"", "display":"none", "sourceFrom":"migx", "sources":"", "inputOptionValues":"", "default":"", "useDefaultIfEmpty":"0", "pos":4 } ], "pos":1 } ], "contextmenus":"edit_migx||duplicate_migx||remove_migx_and_image||movetotop_migx||movetotop_bottom", "actionbuttons":"loadfromsource||uploadfiles", "columnbuttons":"", "filters":"", "extended":{ "migx_add":"Add Image", "disable_add_item":1, "add_items_directly":"", "formcaption":"Изображение", "update_win_title":"", "win_id":"resourcegallery", "maxRecords":"", "addNewItemAt":"bottom", "multiple_formtabs":"", "multiple_formtabs_label":"", "multiple_formtabs_field":"", "multiple_formtabs_optionstext":"", "multiple_formtabs_optionsvalue":"", "actionbuttonsperrow":4, "winbuttonslist":"", "extrahandlers":"this.handleColumnSwitch", "filtersperrow":4, "packageName":"", "classname":"", "task":"", "getlistsort":"", "getlistsortdir":"", "sortconfig":"", "gridpagesize":"", "use_custom_prefix":"0", "prefix":"", "grid":"", "gridload_mode":1, "check_resid":1, "check_resid_TV":"", "join_alias":"", "has_jointable":"yes", "getlistwhere":"", "joins":"", "hooksnippets":"", "cmpmaincaption":"", "cmptabcaption":"", "cmptabdescription":"", "cmptabcontroller":"", "winbuttons":"", "onsubmitsuccess":"", "submitparams":"" }, "columns":[ { "MIGX_id":1, "header":"ID", "dataIndex":"MIGX_id", "width":10, "renderer":"", "sortable":"false", "show_in_grid":1 }, { "MIGX_id":2, "header":"Заголовок", "dataIndex":"title", "width":20, "sortable":"false", "show_in_grid":1, "renderer":"", "clickaction":"", "selectorconfig":"", "renderchunktpl":"", "renderoptions":"", "editor":"this.textEditor" }, { "MIGX_id":3, "header":"Изображение", "dataIndex":"image", "width":20, "renderer":"this.renderImage", "sortable":"false", "show_in_grid":1 }, { "MIGX_id":4, "header":"Опубликовано", "dataIndex":"published", "width":"", "sortable":"false", "show_in_grid":1, "renderer":"this.renderSwitchStatusOptions", "clickaction":"switchOption", "selectorconfig":"", "renderchunktpl":"", "renderoptions":[ { "MIGX_id":1, "name":"publish", "use_as_fallback":"", "value":1, "clickaction":"", "handler":"", "image":"assets\/components\/migx\/style\/images\/cb_ticked.png" }, { "MIGX_id":3, "name":"unpublish", "use_as_fallback":"", "value":"0", "clickaction":"", "handler":"", "image":"assets\/components\/migx\/style\/images\/cb_empty.png" } ], "editor":"" } ] }
После этого заходит в документ, который будет использовать галерею, в дополнительных полях видим таблицу и 2 кнопки:
- Load from media source — загрузить все файлы, которые относятся к этому документу. Кнопка полезна, если вы закачиваете изображения по FTP. Для каждого из документов создается директория в assets/resourceimages/ID.
- Upload Files — открывает диалоговое окно с загрузкой файлов в галерею.
Для того, чтобы сделать надписи кнопок на русском языке, можно создать соответствующие записи в лексиконе. Заходим в «Управление словарями», выбираем пространство имен «migx», тема «default», язык «ru» и создаем 2 записи:
- migx.load_from_source — Загрузить из папки
- migx.upload_images — Загрузить с компьютера
Необходимо знать
- Галерея корректно работает только с существующими ресурсами. Для использования с новыми ресурсами, необходимо сначала сохранить документ, чтобы ему был назначен ID.
- При удалении изображений из таблицы TV поля, они так же удаляются из папки.
к примеру [[migxResourceMediaPath? &pathTpl=`assets/subdomen/«context_key»/{id}/` &createFolder=`1`]]
Загружаю изображения по ftp, потом через Load from mediasource. Хочется сделать разметку для слайдера с миниатюрами, т.е.
[[!getImageList?
&tvname=`TestGal`
&tpl=`@CODE:`
&where=`{«published»:«1»}`
]]
Основное изображение грузится в папку /images/places/alias/, миниатюры в папку images/places/alias/small/, названия файлов у основного изображения и у миниатюры одинаковые, т.е. путь до миниатюры отличается только дополнительной папкой small.
Подскажите, пожалуйста, можно ли как-то получить либо адрес миниатюры для тега img, либо хотя бы имя файла основного изображения без адреса, т.е. img.jpg?
Далее в вызове getImageList замените &tpl=`TestGal_item`
Создайте чанк TestGal_item:
Первое изображение будет оригинал, второе — в папке small.
Нашла еще один вариант — вызов с getImageList &processTVs='0' и указание адреса в вызове вручную — /images/places/[[*alias]]/[[+image]] и /images/places/[[*alias]] /small/[[+image]]. Попробую посмотреть, какой из вариантов работает быстрее, им и воспользуюсь.
Большое спасибо за статью. Но не подскажете ли, как можно аккуратно дать права на добавление файлов для контент-менеждера, чтобы он мог видеть только каталог с изображениями? Если давать права на источник ResourceMediaPath, то ему становится доступной вся директория assets с её поддиректориями.
Если создать источник с тем же путём, то пользователь не может загружать файлы из TV: выдаётся ошибка «Доступ запрещён».
Можно ли как-то ограничить пользователя в правах, чтобы он мог при этом добавлять картинки?
Вывожу данную конструкцию через pdoResources. У снеппета pdoResources tpl(чанк) указан &tpl=`tpl.Article.Item`в чанке вывожу список и первую фотографию.
[[getImageList? &tvname=`images-article` &tpl=`@CODE:` &limit=`1` &docid=`[[+id]]`]]
Проблема, что изображение выводится только для первого ресурса, остальные изображения не выводится. в URL адресе не изменяется id ресурса, в чем может быть проблема?
В таком случае нужно использовать параметр &value и передавать туда json данные.
Описание параметров можно посмотреть тут: https://modxdevpro.ru/blog/revo/documentation/120-parameters-migx-getimagelist
В чанке migx_tpl вызывать getImageList:
tpl gallery
В итоге выводится от ресурса с ID 7:
img src=«assets/resourceimages/7/01.jpg»
img src=«assets/resourceimages/7/02.jpg»
от ресурса с ID 6:
img src=«assets/resourceimages/7/21.jpg»
img src=«assets/resourceimages/7/22.jpg»
то есть папка 7 (от последнего ресурса) остается в пути для всех ресурсов, а имена файлов берет правильно из соответствующих ID папок.
В документации к getImagelist сказано что если указан &value, то параметры &docid и &tvname будут проигнорированы, однако если их убираю то не выводятся пути вообще, только названия файлов.
И попробовать вот так:
А во втором все осталось без изменений.
Либо оставить все как было и отменить кеширование
В таком случае путь всегда корректный.
Один в один проблема как у человека написавшего этот комментарий, может кто сталкивался с таким.
Проверьте так же, что у вас выводит [[*resourcealbum]]
и не удаляются со страницы) Что можно сделать, что бы удалить?