userPages - cоздание ресурсов MODX3 и товаров miniShop3 пользователями
Всем привет!
userPages — дополнение, позволяющее авторизованным посетителям сайта создавать и редактировать ресурсы MODX3 и товары miniShop3.

Компонент доступен в репозитории.
Подробная документация и примеры
Выводит форму добавления / редактирования ресурса, подключает все необходимые скрипты и стили.
Параметры:
Работа с товаром miniShop3 в категории с id=15, модерацией (&published=`0`), cвоими чанками форм и адресами менеджеров:
Помимо этого можно указать любое предустанавливаемое значение для ресурса с учетом префикса.
Используется в форме редактирования для вывода значений полей ресурса (выбранные селекты, отмеченные чекбоксы).
Поле ресурса:
TV-параметр с именем instock:
Поле товара miniShop3:
Селект производителей товаров miniShop3 (чанк up_vendor_option идёт в комплекте):

У контейнера должен быть атрибут data-field со значением, соответствующим name скрытого textarea:

Для формирования виджетов в вызове сниппета userPages должен присутствовать параметр migxFields с перечисленными через запятую полями.
При загрузке скрипт проверяет что прописано у TV в названии и параметрах ввода (конфигурация MIGX или вкладки формы) и формирует соответствующую таблицу, в которой можно добавлять и удалять строки, менять порядок и т. д.
У контейнера должен быть id="migx_fieldndme_widget", а у скрытого textarea name и id вида migx_fieldndme.
Пример для MIGX-параметра с именем chars:

Для настройки Dropzone-виджета используются следующие data-атрибуты у контейнера:
Галерея товара miniShop3 с Dropzone и настройками по умолчанию (чанк up_gallery_tpl идёт в комплекте):
Вызывается перед сохранением ресурса.
Принимает массив $data с входящими данными. Должен также возвращать $data.
Если добавить $date['error_message'] выведется соответствующее сообщение об ошибке и скрипт прекратит работу.
Например, нужно проверить TV-параметр tv_seotitle на длину и если она больше 70 знаков вывести сообщение об ошибке, а если нет, добавить фразу ", купить недорого":
Вызывается после сохранения ресурса.
Принимает объект ресурса $object, ничего не возвращает.
Например, нужно все внешние ссылки в контенте заменить на [ссылка]:
0
userPages — дополнение, позволяющее авторизованным посетителям сайта создавать и редактировать ресурсы MODX3 и товары miniShop3.
Основные свойства
- Работает как со стандартными ресурсами, так и с товарами MiniShop3
- Проверка групп пользователей
- Поддержка TV-параметров (с учетом источников файлов), MIGX-полей, а также галереи, полей и опций товаров MiniShop3
- Поля с WYSIWYG-редактором Pell
- Загрузка файлов и изображений посредством Dropzone
- Табличный виджет для MIGX-полей
- Возможность сохранения черновика
- Возможность удаления ресурса
- Email-уведомления менеджеров
- Настраиваемые всплывающие уведомления
- Системные события для плагинов

Компонент доступен в репозитории.
Подробная документация и примеры
Сниппет userPages
Выводит форму добавления / редактирования ресурса, подключает все необходимые скрипты и стили.
Параметры:
- class Класс ресурса modResource или msProduct (modResource)
- parent Родительский ресурс (0
- 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' | 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)
- tv_ TV-параметр
- migx_ TV-параметр типа MIGX
- ms_ Поле товара miniShop3 (таблица modx_ms3_products)
- mso_ Опции товара miniShop3 (таблица modx_ms3_product_options)
Сниппет upCheck
Используется в форме редактирования для вывода значений полей ресурса (выбранные селекты, отмеченные чекбоксы).
- rid ID ресурса
- field Поле с префиксом
- value Значение
- type Тип вывода (selected — для списков, пусто — для checkbox и radio)
{$rid | resource : 'fieldname'} Примеры полей форм
Поле ресурса:
<input name="pagetitle" value="{$rid | resource : 'pagetitle'}" placeholder="{'up_pagetitle' | lexicon}"> TV-параметр с именем instock:
<input name="tv_instock" value="{$rid | resource : 'instock'}">Поле товара miniShop3:
<label>
<input type="checkbox" name="ms_new" value="1"> Новинка
</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>Текстовый редактор

У контейнера должен быть атрибут data-field со значением, соответствующим name скрытого textarea:
<div class="up-richeditor" data-field="content"></div>
<textarea name="content" class="up-hidden">{$rid | resource : 'content'}</textarea> Табличные виджеты для MIGX-параметров

Для формирования виджетов в вызове сниппета userPages должен присутствовать параметр migxFields с перечисленными через запятую полями.
При загрузке скрипт проверяет что прописано у TV в названии и параметрах ввода (конфигурация MIGX или вкладки формы) и формирует соответствующую таблицу, в которой можно добавлять и удалять строки, менять порядок и т. д.
У контейнера должен быть id="migx_fieldndme_widget", а у скрытого textarea name и id вида migx_fieldndme.
Пример для MIGX-параметра с именем chars:
<div id="migx_chars_widget" class="tablewidget"></div>
<textarea name="migx_chars" id="migx_chars" class="up-hidden">{$migx_chars}</textarea>Поля Dropzone
Поля для файлов, изображений и галереи товара miniShop3 с мультизагрузкой, изменением порядка и настраиваемыми параметрами.
Для настройки Dropzone-виджета используются следующие data-атрибуты у контейнера:
- data-field Имя поля
- data-files Максимальное кол-во файлов (5)
- data-types Типы файлов. Можно указывать как непосредственно расширения, так и типы. (image/*)
- data-size Размер одного файла в МБ (5)
<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> Галерея товара 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
Вызывается перед сохранением ресурса.
Принимает массив $data с входящими данными. Должен также возвращать $data.
Если добавить $date['error_message'] выведется соответствующее сообщение об ошибке и скрипт прекратит работу.
Например, нужно проверить TV-параметр tv_seotitle на длину и если она больше 70 знаков вывести сообщение об ошибке, а если нет, добавить фразу ", купить недорого":
<?php
switch($modx->event->name){
case 'upOnBeforeChangeResource':
if(mb_strlen($data['tv_seotitle']) > 70){
$data['error_message'] = 'Слишком длинный заголовок';
}else{
if(mb_stripos($data['tv_seotitle'], ', купить недорого') === false){
$data['tv_seotitle'] = $data['tv_seotitle'].', купить недорого';
}
}
$modx->event->returnedValues['data'] = $data;
break;
}upOnAfterChangeResource
Вызывается после сохранения ресурса.
Принимает объект ресурса $object, ничего не возвращает.
Например, нужно все внешние ссылки в контенте заменить на [ссылка]:
<?php
switch($modx->event->name){
case 'upOnAfterChangeResource':
if($object){
$content = preg_replace('/(?:https?|ftp):\/\/[^\s]+|www\.[^\s]+/', '[ссылка]', $object->get('content'));
$object->set('content', $content);
$object->save();
}
break;
}