userPages - cоздание ресурсов MODX3 и товаров miniShop3 пользователями

Всем привет!

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)
Указание полей в вызове перекрывает данные из формы, то есть если указано &parent=`15`, а в форме есть поле с name=«parent», то что-бы пользователь в нем не проставил, родителем будет ресурс с ID=15.

Сниппет upCheck


Используется в форме редактирования для вывода значений полей ресурса (выбранные селекты, отмеченные чекбоксы).
  • rid ID ресурса
  • field Поле с префиксом
  • value Значение
  • type Тип вывода (selected — для списков, пусто — для checkbox и radio)
В комплекте идут чанки с примерами форм (поддерживается Fenom и стандартный синтаксис). В форме редактирования доступен плейсхолдер rid, который выводит ID редактируемого ресурса и его можно использовать для вывода значений полей через модификатор resource:

{$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)
Например, есть 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>

Галерея товара 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;
}
Павел Романов
1 час назад
modx.pro
11
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0