userPages

Создание ресурсов и товаров MiniShop3 пользователями
Автор дополнения
Павел Р.
Пакетов
5
Закачек
18
Обычно отвечает в течение 2 часов
Автор дополнения
Пакетов
5
Закачек
18
Обычно отвечает в течение 2 часов
Версия 1.0.0-pl
Дата выпуска 17.02.2026
Загрузки 0
Просмотры 170
Внимание, этот компонент требует PHP 8.0 или выше!
Внимание, этот компонент требует MODX 3 или выше.

Основные свойства


  • Работает со стандартными ресурсами и товарами MiniShop3
  • WYSIWYG-редактор Pell
  • Загрузка файлов и изображений с возможностью использования Dropzone
  • Поддержка TV-параметров (с учетом источников файлов), MIGX-полей, а также галереи, полей и опций товаров MiniShop3
  • Возможность сохранения черновика
  • Email-уведомления менеджеров
  • Настраиваемые всплывающие уведомления
  • Системные события для плагинов

Документация и примеры: demo.rpa-design.ru/userpages.html

Поле с текстовым редактором


Табличные виджеты для MIGX-параметров
При загрузке скрипт проверяет что прописано у данного TV в названии и параметрах ввода (конфигурация MIGX или вкладки формы) и формирует соответствующую таблицу, в которой можно добавлять и удалять строки, менять порядок и т. д.


Поля Dropzone
Поля для файлов, изображений и галереи товара miniShop3 с мультизагрузкой, изменением порядка и настраиваемыми параметрами.



Сниппет 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)
  • 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'}">

Вывод табличного виджета для 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>

Поле товара 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>

Системные события для плагинов
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;
}

Последние обсуждения в сообществе MODX.pro