Компонент для создания и редактирования ресурсов пользователями сайта
Основные свойства
- Работает со стандартными ресурсами и товарами MiniShop3
- WYSIWYG-редактор Pell
- Загрузка файлов и изобажений с возможностью использования Dropzone
- Поддержка TV-параметров (с учётом источников файлов), MIGX-полей, а также галереи, полей и опций товаров MiniShop3
- Возможность сохранения черновика
- Email-уведомления менеджеров
- Настраиваемые всплывающие уведомления
- Системные события для плагинов
Установка
Пакет устанавливается стандартным образом через установщик MODX3.
Системные настройки
| up_css_url | Путь к основному CSS-файлу относительно корня сайта | {assets_url}components/userpages/js/default.css |
|---|---|---|
| up_js_url | Путь к основному JS-файлу относительно корня сайта | {assets_url}components/userpages/js/default.js |
| up_notifications | Скрипт для всплывающих уведомлений. Поддерживаются Notyf и SweetAlert2 (требуется установка), а также можно указать miniShop3, FetchIt или AjaxForm для использования уведомлений этих компонентов (если они установлены). | Notyf |
Пример формы
Сниппет userPages
Выводит форму добавления / редактирования ресурса, подключает все необходимые скрипты и стили.
| class | Класс ресурса (modResource/msProduct) | modResource |
|---|---|---|
| parent | Родительский ресурс | |
| template | Шаблон ресурса | [[++default_template]] |
| published | Публиковать ли ресурс сразу после добавления | [[++publish_default]] |
| required | Обязательные поля через запятую | pagetitle,content |
| migxFields | MIGX-поля для вывода в форме (через запятую). Параметр используется для построения табличных виджетов. | |
| tplCreateForm | Чанк-шаблон формы создания ресурса | up_create_form |
| tplEditForm | Чанк-шаблон формы редактирования ресурса | up_edit_form |
| errorText | Чанк-шаблон текста ошибки (при невозможности создания/редактирования) | up_error_text |
| notifications | Скрипт всплывающих уведомлений | [[++up_notifications]] |
| userGroups | Группы пользователей через зяпятую, которые могут работать с userPages | Administrator |
| emailFrom | Адрес отправителя | [[++emailsender]] |
| emailManager | Почтовые адреса менеджеров для уведомлений | [[++emailsender]] |
| emailManagerSubject | Тема письма менеджерам | [[%up_manager_subject]] |
| emailManagerTpl | Чанк-шаблон письма менеджерам | up_email_tpl |
Примеры
Минимальный вызов:
[[!userPages]]
Fenom
{'!userPages' | snippet : []}
Работа с товаром miniShop3 в категории с id=15, модерацией ('published' => 0), cвоими чанками форм и адресами менеджеров:
{'!userPages' | snippet : [
'class' => 'msProduct',
'parent' => 15,
'published' => 0,
'tplCreateForm' => 'my_create_form',
'tplEditForm' => 'my_edit_form',
'emailManager' => 'manager1@gmail.com,manager2@gmail.com',
]}
Помимо этого можно указать любое предустанавливаемое значение для ресурса с учетом префикса.
Префиксы полей
| Без префикса | Поле ресурса (таблица modx_site_content) | pagetitle | longtitle | content |
|---|---|---|
| tv_ | TV-параметр | tv_tvname |
| migx_ | TV-параметр типа MIGX | migx_tvname |
| ms_ | Поле товара miniShop3 (таблица modx_ms3_products) | ms_price | ms_new | ms_vendor |
| mso_ | Опции товара miniShop3 (таблица modx_ms3_product_options) | mso_fieldname |
Указание полей в вызове перекрывает данные из формы, то есть если указано &parent=`15`, а в форме есть поле с name="parent", то что-бы пользователь в нем не проставил, родителем будет ресурс с ID=15.
Если используете предуставноленные поля типа MIGX, то значения указывайте в JSON-формате:
[[
...
&migx_chars=`[ [ { "title":"Высота","value":"1500"},{"title":"Ширина","value":"500"} ] ]`
...
]]
Сниппет upCheck
Сниппет используется в форме редактирования для вывода значений полей ресурса (выбранные селекты, отмеченные чекбоксы).
| rid | ID ресурса |
|---|---|
| field | Поле с префиксом |
| value | Значение |
| type | Тип вывода (selected - для списков, пусто - для checkbox и radio) |
В комплекте идут чанки с примерами форм (поддерживается Fenom и стандартный синтаксис). В форме редактирования доступен плейсхолдер rid, который выводит ID редактируемого ресурса и его можно использовать для вывода значений полей через модификатор resource:
{$rid | resource : 'fieldname'}
Префиксы полей
| Без префикса | Поле ресурса (таблица modx_site_content) | pagetitle | longtitle | content |
|---|---|---|
| tv_ | TV-параметр | tv_tvname |
| migx_ | TV-параметр типа MIGX | migx_tvname |
| ms_ | Поле товара miniShop3 (таблица modx_ms3_products) | ms_price | ms_new | ms_vendor |
| mso_ | Опции товара miniShop3 (таблица modx_ms3_product_options) | mso_fieldname |
Поле ресурса:
<input name="pagetitle" value="{$rid | resource : 'pagetitle'}" placeholder="{'up_pagetitle' | lexicon}">
Поле товара miniShop3:
<label>
<input type="checkbox" name="ms_popular" value="1"> {'up_popular' | lexicon}
</label>
Селект производителей товаров miniShop3 (чанк up_vendor_option идёт в комплекте):
<select name="ms_vendor_id">
{'pdoResources' | snippet : [
'class' => 'MiniShop3\Model\msVendor',
'sortby' => '{ "name":"ASC" }'
'tpl' => 'up_vendor_option',
'rid' => $rid
]}
</select>
Категории товара miniShop3 (чанк up_category_tpl идёт в комплекте):
<select name="ms_vendor_id">
{'pdoResources' | snippet : [
'parents' => 0,
'where' => '{ "class_key:LIKE":"%Category%" }',
'limit' => 0,
'sortby' => '{ "pagetitle":"ASC" }'
'tpl' => 'up_category_tpl'
'rid' => $rid
]}
</select>
TV-параметр с именем instock:
<input name="tv_instock" value="{$rid | resource : 'instock'}">
У TV с типом image или file скрипт проверит источник файлов, создаст там директорию с ID нового ресурса и загрузит файлы в неё.
MIGX-параметры
Табличный виджет при загрузке проверяет что прописано у данного TV в названии и параметрах ввода (конфигурация MIGX или вкладки формы) и формирует соответствующую таблицу, в которой можно добавлять и удалять строки, перемещать их местами и т.д.
Пример вывода виджета для поля с именем chars (обратите внимание на id="migx_chars_widget" у контейнера и атрибуты name и id, а также плейсхолдер {$migx_chars} скрытого textarea):
<div id="migx_chars_widget" class="tablewidget"></div>
<textarea name="migx_chars" id="migx_chars" class="up-hidden">{$migx_chars}</textarea>
Поле с текстовым редактором
У контейнера должен быть data-field со значением, соответствующим name скрытого textarea:
<div class="up-richeditor" data-field="content"></div>
<textarea name="content" class="up-hidden">{$rid | resource : 'content'}</textarea>
Поля Dropzone
Виджет поддерживает мультизагрузку и изменение порядка файлов.
Для настройки виджета используются data-атрибуты у контейнера:
| data-field | Имя поля | |
|---|---|---|
| data-files | Максимальное кол-во файлов | 5 |
| data-types | Типы файлов. Можно указывать как непосредственно расширения, так и типы. | image/* |
| data-size | Размер одного файла в МБ | 5 |
Например, есть TV-параметр file для файлов типа PDF,XLSX,DOCX и нужно ограничить количество файлов тремя, чтобы каждый весил не более 10МБ:
<div class="up-dropzone dropzone" data-field="tv_files" data-files="3" data-types=".pdf,.xlsx,.docx" data-size="10"></div>
<textarea name="tv_files" class="up-hidden">{$rid | resource : 'files'}</textarea>
Если для TV-поля указан источник файлов, отличный от Filesystem, то в форме редактирования для вывода существующего значения используйте сниппет upCheck без параметра value (он выведет чистые данные из базы):
<textarea name="tv_files" class="up-hidden">
{'!upCheck' | snippet : ['rid' => $rid, 'field' => 'tv_files']}
</textarea>
Галерея товара miniShop3 с Dropzone и настройками по умолчанию (чанк up_gallery_tpl идёт в комплекте):
<div class="up-dropzone dropzone" data-field="ms_gallery"></div>
<textarea name="ms_gallery" class="up-hidden">{'!msGallery' | snippet : ['product' => $rid, 'tpl' => 'up_gallery_tpl']}</textarea>
Системные события для плагинов:
| upOnBeforeChangeResource |
Вызывается перед созданием / редактированием ресурса. Например, нужно проверить TV-параметр
|
|---|---|
| upOnAfterChangeResource |
Вызывается после сохранения ресурса. Например, нужно все внешние ссылки в контенте заменить на
|