`
10 | - **where** - условия для вывода. Доступные параметры чанка(tpl):
11 | - **{$id}** - id раздела
12 | - **{$idx}** - индекс раздела
13 | - **{$filter}** - GET параметр
14 | - **{$title}** - Заголовок
15 | - **{$description}** - Описание
16 | - **{$img}** - Картинка
17 | - **{$content}** - Контент
18 | - **{$value_success}** - Значение правильного ответа
19 | - **{$success}** - Сообщение при правильном ответе
20 | - **{$error}** - Сообщение при неправильном ответе
21 | - **{$question}** - Вопрос для условия (id)
22 | - **{$answer}** - Ответ для условия (id)
23 |
24 | ## Пример
25 |
26 | Выводим все разделы, у которых нет условий:
27 |
28 | ```fenom
29 | {'!QuizSteps' | snippet: [
30 | 'id' => 2,
31 | 'where' => [
32 | 'question:<' => '1'
33 | ]
34 | ]}
35 | ```
36 |
--------------------------------------------------------------------------------
/docs/components/quiz/snippets/seoimg.md:
--------------------------------------------------------------------------------
1 | # Сниппет SeoImg
2 |
3 | Сниппет предназначен для формирования изображение с текстом при выводе результата.
4 |
5 | ## Параметры
6 |
7 | - **img** - ссылка на изображение
8 | - **points** - баллы
9 | - **title** - заголовок
10 | - **description** - описание
11 |
12 | ## Пример
13 |
14 | ```fenom
15 | {set $img = '!SeoImg' | snippet: [
16 | 'img' => 'assets/img/quiz/1.jpg',
17 | 'title' => 'SEOIMG',
18 | 'description' => 'Описание',
19 | ]}
20 | ```
21 |
22 | 
23 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/development/services/getter.md:
--------------------------------------------------------------------------------
1 | # Геттер
2 |
3 | Процессом получения данных занимается специальный класс **rgContentGetter**, который реализует интерфейс **rgGetterInterface**.
4 | Конечно, вы можете подключить собственный класс и указать его в сниппете **getter**
5 |
6 | Итак, обязательные методы интерфейса `rgGetterInterface`:
7 |
8 | - `init` - Инициализирует класс.
9 | - `client` - Возвращает экземпляр класса обработчика.
10 | - `run` - Запускает обработку и возвращает данные.
11 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/development/services/grabber.md:
--------------------------------------------------------------------------------
1 | # Граббер
2 |
3 | Процессом получения парсинга данных занимается специальный класс **rgContentGrabber**, который реализует интерфейс **rgGrabberInterface**.
4 | Конечно, вы можете подключить собственный класс и указать его в сниппете **grabber**.
5 |
6 | Итак, обязательные методы интерфейса `rgGrabberInterface`:
7 |
8 | - `init` - Инициализирует класс.
9 | - `client` - Возвращает экземпляр класса обработчика.
10 | - `run` - Запускает обработку и возвращает данные.
11 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/development/services/setter.md:
--------------------------------------------------------------------------------
1 | # Сеттер
2 |
3 | Процессом записи данных занимается специальный класс **rgResourceSetter**, который реализует интерфейс **rgSetterInterface**.
4 | Класс подгружается согласно поля `class_key` ресурса.
5 |
6 | Реализованы:
7 |
8 | - `rgResourceSetter` - базовый класс.
9 | - `rgMsProductSetter` - продукта **minishop**.
10 |
11 | Если для вашего `class_key` не реализован соответствующий класс - будет подгружен базовый.
12 |
13 | Итак, обязательные методы интерфейса `rgSetterInterface`:
14 |
15 | - `init` - Инициализирует класс.
16 | - `get` - Возвращает ресурс.
17 | - `create` - Создает ресурс.
18 | - `update` - Обновляет ресурс.
19 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/interface/data.md:
--------------------------------------------------------------------------------
1 | # Данные
2 |
3 | ## Загрузить / Создать / Изменить данные
4 |
5 | По указанной ссылке будут подгружены данные обработанные сниппетом.
6 |
7 | 
8 |
9 | Выбор `типа` корректирует подгружаемые данные с помощью настроек:
10 |
11 | - `fields_on_create` - поля доступные при создании.
12 | - `fields_on_update` - поля доступные при обновлении.
13 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/interface/index.md:
--------------------------------------------------------------------------------
1 | # Панель управления
2 |
3 | Панель управления находится на странице ресурса, доступна через меню и сочетание клавиш [[Alt]]+[[g]].
4 | Содержит следующие вкладки:
5 |
6 | ## Основное
7 |
8 | Вкладка, на которой доступны полученные [данные][2].
9 | Действия: **загрузить**/**создать**/**изменить** данные.
10 |
11 | 
12 |
13 | ## Сниппеты
14 |
15 | Вкладка, на которой собраны [сниппеты][3].
16 | Действия: **создать**/**изменить**/**удалить** сниппет.
17 |
18 | [2]: /components/resourcegrabber/interface/data
19 | [3]: /components/resourcegrabber/interface/snippets
20 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/interface/settings.md:
--------------------------------------------------------------------------------
1 | # Настройки
2 |
3 | Настройки `ResourceGrabber` расположены в **Системные настройки** > **ResourceGrabber**
4 |
5 | ## Основные
6 |
7 | Содержит основные настройки:
8 |
9 | - `{working_templates}` - активные шаблоны. Список id шаблонов через запятую, для которых нужно активировать функционал.
10 | - `{fields_on_create}` - список полей доступных при создании ресурса. По умолчанию пуст - доступны все поля.
11 | - `{fields_on_update}` - список полей доступных при обновлении ресурса. По умолчанию "currency,price,old_price".
12 |
--------------------------------------------------------------------------------
/docs/components/resourcegrabber/interface/snippets.md:
--------------------------------------------------------------------------------
1 | # Сниппеты
2 |
3 | ## Создать / Изменить сниппет
4 |
5 | Сниппет - фрагмент php кода в котором происходит обработка данных.
6 | Для создании сниппета необходимо задать название и указать код сниппета. Можно указать маску сайта - сработает автоматический поиск сниппета по ссылке.
7 |
8 | 
9 |
10 | Возможно создание своих обработчиков для получения и парсинга данных, за это отвечают соответствующие классы сниппета.
11 | Наличие флага `статичный` позволяет подключить код сниппета из файла.
12 |
13 | В результате сниппет должен вернуть массив загружаемых данных что и будут доступны для **создания**/**обновления** ресурса.
14 |
--------------------------------------------------------------------------------
/docs/components/resvideogallery/adding-custom-video-parser.md:
--------------------------------------------------------------------------------
1 | # Добавление своего видео парсера
2 |
3 | Для того чтобы добавить свой видео парсер нужно создать в `core/components/resvideogallery/model/resvideogallery/providers` php файл с классом наследником от RvgProvider в котором определить метод "scrape" и переопределить ряд свойств.
4 |
--------------------------------------------------------------------------------
/docs/components/resvideogallery/events.md:
--------------------------------------------------------------------------------
1 | # События
2 |
3 | Доступны следующие события:
4 |
5 | - **rvgOnBeforeVideoAdd**
6 | - `properties` - параметры запроса
7 | - **rvgOnAfterVideoAdd** - добавление видео
8 | - `video` - экземпляр класса RvgVideos
9 | - `properties` - параметры запроса
10 | - **rvgOnBeforeVideoUpdate**
11 | - **rvgOnAfterVideoUpdate** - обновление видео
12 | - `video` - экземпляр класса RvgVideos
13 | - `properties` - параметры запроса
14 | - **rvgOnBeforeVideoRemove**
15 | - **rvgOnAfterVideoRemove** - удаление видео
16 | - `video` - экземпляр класса RvgVideos
17 | - **rvgOnBeforeThumbUpdate**
18 | - **rvgOnAfterThumbUpdate** - обновление превью для видео
19 | - `properties` - параметры запроса
20 | - `video` - экземпляр класса RvgVideos
21 | - **rvgOnGetVideoEmbed** - получения кода вставки видео
22 | - `data` - массив данных о видео
23 |
--------------------------------------------------------------------------------
/docs/components/resvideogallery/setup/vkontakte.md:
--------------------------------------------------------------------------------
1 | # Вконтакте
2 |
3 | - Регистрируемся в Вконтакте, авторизовываемся.
4 | - Менеджер приложений находится [тут](https://vk.com/apps?act=manage), переходим.
5 | - Создаем приложение в Вк.
6 | - Указываем название, выбираем тип приложения **Standalone**.
7 | - Включаем приложение, изменив селект *Состояние* и сохраняем изменения.
8 | - Переходим в настройки и копируем ID приложения. Заменяем {ID приложения} в строке `https://oauth.vk.com/authorize?client_id={ID приложения}&scope=offline,video&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.73&response_type=token` на наш ID приложения и вставляем в строку броузера.
9 | - В появившемся окне нажимаем разрешить.
10 | - Получаем строку следующего вида `https://oauth.vk.com/blank.html#access_token=349252841f7c58495dd5692d8b55ab6460ec23aa60dsfdsfdsfdsfdsfdsfdsfsdfsdfsddfsddfcx&expires_in=0&user_id=30314063` копируем access_token в блокнотик. Если появляется ошибка вида `{"error":"invalid_request»,»error_description":"Security Error"}` необходимо выйти из своего аккаунта ВКонтакте и снова в нем авторизоваться.
11 | - Теперь открываем наш сайт. Переходим в Системные настройки / ResVideoGallery и прописываем скопированное значение access_token в опцию "Access Token для Вконтакте".
12 |
--------------------------------------------------------------------------------
/docs/components/scheduler/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Scheduler
3 | description: Планирование отложенных задач
4 | logo: https://modstore.pro/assets/extras/scheduler/logo-lg.png
5 | author: modx-pro
6 | modstore: https://modstore.pro/packages/utilities/scheduler
7 |
8 | items: [
9 | { text: 'Установка', link: 'installation' },
10 | { text: 'Создание задания', link: 'create-a-task' },
11 | { text: 'Планирование задания', link: 'job-scheduling' },
12 | { text: 'Разработка заданий', link: 'task-development' },
13 | ]
14 | ---
15 | # Scheduler
16 |
17 | Компонент от создателя MODX Марка Хамстра Scheduler - это менеджер отложенных задач.
18 | Предназначен для планирования задач, которые должны быть запущены по расписанию в фоновом режиме.
19 | Импорт и Экспорт, отправка писем, уведомления и все задачи, не требующие выполнения здесь и сейчас.
20 |
21 | Позволяет очень просто запустить любой сниппет, процессор или просто PHP файл с вашим скриптом в указанное вами время.
22 |
--------------------------------------------------------------------------------
/docs/components/seofilter/snippets/index.md:
--------------------------------------------------------------------------------
1 | # Сниппеты
2 |
3 | На данный момент в компоненте 4 сниппета. С их описанием можете ознакомиться на соответствующих страницах по ссылкам внизу страницы. Также вы можете предлагать свои решения для сниппетов. Те решения, которые понадобятся многим - будут написаны и выложены в последующих версиях.
4 |
5 | - [sfWord](/components/seofilter/snippets/sfword)
6 | - [sfLink](/components/seofilter/snippets/sflink)
7 | - [sfMenu](/components/seofilter/snippets/sfmenu)
8 | - [sfSitemap](/components/seofilter/snippets/sfsitemap)
9 |
--------------------------------------------------------------------------------
/docs/components/socialtools/snippets/socdialogform.md:
--------------------------------------------------------------------------------
1 | # socDialogForm
2 |
3 | Сниппет предназначен для вывода формы отправки сообщения.
4 |
5 | ## Параметры
6 |
7 | Всего есть 1 параметр это шаблон формы **tplFormCreate**, по умолчанию **soc.sendForm**
8 |
9 | Так же есть проверка в массиве *$_REQUEST* параметра `recipient`, это id пользователя.
10 | Если он есть, то поле username пользователя будет установлен в плейсхолдер `recipient`.
11 |
12 | ## Примеры
13 |
14 | Простейший пример вывода формы
15 |
16 | ```modx
17 | [[!socDialogForm]]
18 | ```
19 |
--------------------------------------------------------------------------------
/docs/components/socialtools/snippets/socdialogreceive.md:
--------------------------------------------------------------------------------
1 | # socDialogReceive
2 |
3 | Сниппет предназначен для вывода формы чтения сообщения.
4 |
5 | Сниппет проверяет наличие параметров **msgID** и **action** в `$_REQUEST` и если их нет, или сообщение не принадлежит авторизированному пользователю - сниппет выдаст ошибку.
6 |
7 | Пример ссылки на ресурс со сниппетом чтения сообщения:
8 |
9 | ```modx
10 | Сообщение
11 | ```
12 |
13 | ## Параметры
14 |
15 | | Название | По умолчанию | Описание |
16 | | ---------------------- | -------------------- | -------------------------------------- |
17 | | **&tplFormReadInbox** | `soc.readFormInbox` | Шаблон для вывода входящего сообщений |
18 | | **&tplFormReadOutbox** | `soc.readFormOutbox` | Шаблон для вывода исходящего сообщений |
19 |
20 | ### Примеры
21 |
22 | Простейший пример вывода формы
23 |
24 | ```modx
25 | [[!socDialogReceive]]
26 | ```
27 |
--------------------------------------------------------------------------------
/docs/components/textadvs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: textAdvs
3 | description: Умная реклама в контенте страницы
4 | logo: https://modstore.pro/assets/extras/textadvs/logo-lg.png
5 | author: gvozdb
6 | modstore: https://modstore.pro/packages/content/textadvs
7 |
8 | items: [
9 | { text: 'Как добавить тег', link: 'how-to-add-a-tag' },
10 | ]
11 | ---
12 | # textAdvs
13 |
14 | **textAdvs** - это компонент для встраивания блоков рекламы в `content` ресурса при отображении страницы пользователю.
15 |
16 | ## Умеет
17 |
18 | - Размещаться до/после определённого по счёту тега,
19 | - Работать только на определённом шаблоне,
20 | - Отображать блоки объявлений один за другим (по мере обновления страницы),
21 | - Подтягивать кастомные теги.
22 |
23 | 
24 |
--------------------------------------------------------------------------------
/docs/components/tickets/parts/tip-general-properties.md:
--------------------------------------------------------------------------------
1 | ::: tip
2 | Список может быть расширен общими параметрами [pdoTools](/components/pdotools/general-properties) так как Tickets работает на этой библиотеке.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/components/tickets/parts/warning-demo.md:
--------------------------------------------------------------------------------
1 | ::: warning Важно
2 | Важно помнить что компонент Tickets поставляется без демо данных и без шаблонов. По этому вам нужно предварительно их создать. Так же секция тикетов и сам тикет это расширенный стандартный «modDocument» по этому имеет все те же TV поля, плейсхолдеры и логика работы.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/components/tickets/snippets/ticketmeta.md:
--------------------------------------------------------------------------------
1 | # TicketMeta
2 |
3 | Выводит информацию о текущем тикете, так же позволяет голосовать за тикет на его собственной странице.
4 |
5 | ::: tip
6 | С версии 1.4.0 Сниппет может использоваться с любыми ресурсами MODX
7 | :::
8 |
9 | ## Параметры вызова сниппета
10 |
11 | | Название | По умолчанию | Описание |
12 | | --------------- | ------------------ | --------------------------------------------------------------------- |
13 | | **&getSection** | `1` | Сделать дополнительный запрос в БД для получения родительской секции? |
14 | | **&getUser** | `1` | Сделать дополнительный запрос в БД для получения профиля автора? |
15 | | **&tpl** | `tpl.Tickets.meta` | Чанк оформления информации о тикете. |
16 |
17 | ## Примеры вызова
18 |
19 | - Стандартный вызов сниппета
20 |
21 | ```modx
22 | [[!TicketMeta]]
23 | ```
24 |
25 | - Что бы посмотреть все доступные стандартные плейсхолдеры
26 |
27 | ```modx
28 | [[!TicketMeta? &tpl=``]]
29 | ```
30 |
--------------------------------------------------------------------------------
/docs/components/userauthhash/development/events.md:
--------------------------------------------------------------------------------
1 | # События UserAuthHash
2 |
3 | Доступны следующие события:
4 |
5 | * `uahOnBeforeGetAuthHash`
6 | * `uahOnGetAuthHash` - получение хэш-кода
7 | *`object` - хэш-код объект
8 | *`user` - пользователь объект
9 | * `uahOnBeforeProcessAuthHash`
10 | * `uahOnProcessAuthHash` - обработка хэш-кода
11 | *`object` - хэш-код объект
12 | *`user` - пользователь объект
13 | * `uahOnBeforeRemoveAuthHash`
14 | * `uahOnRemoveAuthHash` - удаление хэш-кода
15 | *`user` - пользователь объект
16 |
--------------------------------------------------------------------------------
/docs/components/userauthhash/development/extensions.md:
--------------------------------------------------------------------------------
1 | # Расширения
2 |
3 | Использование в сторонних компонентах:
4 |
5 | ## Создание хэш-кода авторизации
6 |
7 | ```php
8 | $options = [
9 | 'user' => 'test@gmail.com',
10 | 'lifeTime' => '1m' // срок жизни хэш-кода 1 месяц
11 | ];
12 | /** @var UserAuthHash $UserAuthHash */
13 | if ($UserAuthHash = $modx->getService('userauthhash.UserAuthHash', '', MODX_CORE_PATH.'components/userauthhash/model/')) {
14 | $hash = $UserAuthHash->getAuthHash($options);
15 | }
16 | ```
17 |
18 | ## Удаление хэш-кода авторизации
19 |
20 | ```php
21 | $options = [
22 | 'user' => 'test@gmail.com',
23 | ];
24 | /** @var UserAuthHash $UserAuthHash */
25 | if ($UserAuthHash = $modx->getService('userauthhash.UserAuthHash', '', MODX_CORE_PATH.'components/userauthhash/model/')) {
26 | $hash = $UserAuthHash->removeAuthHash($options);
27 | }
28 | ```
29 |
--------------------------------------------------------------------------------
/docs/components/userevents/development/extensions.md:
--------------------------------------------------------------------------------
1 | # Расширения
2 |
3 | Доступны следующие расширения:
4 |
5 | ## Событие `event`
6 |
7 | - `changeStatus` - сменить "статус" события
8 |
9 | ## Пользователь `user`
10 |
11 | - `getUserId` - получить "идентификатор" пользователя
12 | - `getUserLang` - получить "язык" пользователя
13 |
--------------------------------------------------------------------------------
/docs/components/userevents/development/services/delivery.md:
--------------------------------------------------------------------------------
1 | # Доставка
2 |
3 | Класс доставки реализовывает интерфейс `msDeliveryInterface`
4 |
5 | Никак не используется, нужен только для задания обязательный полей заказа и наименования доставки в заказе.
6 |
--------------------------------------------------------------------------------
/docs/components/userevents/development/services/payment.md:
--------------------------------------------------------------------------------
1 | # Оплата
2 |
3 | Стандартный [miniShop2][0102030304]
4 |
5 | [0102030304]: /components/minishop2/development/services/payment
6 |
--------------------------------------------------------------------------------
/docs/components/userevents/interface/events.md:
--------------------------------------------------------------------------------
1 | # Событие
2 |
3 | ## Создать событие
4 |
5 | 
6 |
7 | Для создании события необходимо указать ресурс и пользователя к которому оно будет привязано. Опции события будут доступны после его сохранения.
8 |
9 | ## Изменение события
10 |
11 | 
12 |
--------------------------------------------------------------------------------
/docs/components/userevents/interface/index.md:
--------------------------------------------------------------------------------
1 | # Интерфейс
2 |
3 | Основная панель управления находятся в отдельном разделе сайта, доступном через меню.
4 | Содержит следующие вкладки:
5 |
6 | ## События
7 |
8 | Вкладка, на которой собраны [события][4]. Доступна сортировка и поиск.
9 | Действия: **создать**/**изменить**/**удалить** событие.
10 |
11 | 
12 |
13 | ## Статусы
14 |
15 | Вкладка, на которой собраны [статусы][8].
16 | Действия: **создать**/**изменить**/**удалить** статус.
17 |
18 | 
19 |
20 | [4]: /components/userevents/interface/events
21 | [8]: /components/userevents/interface/statuses
22 |
--------------------------------------------------------------------------------
/docs/components/userevents/interface/orders.md:
--------------------------------------------------------------------------------
1 | # Заказы
2 |
3 | Панель управления заказами UserEvents представлена в компоненте [miniShop2][020103].
4 | Заказы контента идентифицируются по ключу **context**
5 |
6 | 
7 |
8 | Идентификатор и опция события сохраняется в опциях продукта заказа.
9 |
10 | 
11 |
12 | [020103]: /components/minishop2/interface/orders
13 |
--------------------------------------------------------------------------------
/docs/components/userevents/interface/settings.md:
--------------------------------------------------------------------------------
1 | # Настройки UserEvents
2 |
3 | Настройки UserEvents расположены в **Системные настройки** > **UserEvents**
4 |
5 | ## Основные
6 |
7 | Содержит основные настройки:
8 |
9 | - `{working_templates}` - активные шаблоны. Список id шаблонов через запятую, для которых нужно активировать функционал.
10 | - `{front_css}` - файл с css для подключения на фронте.
11 | - `{front_js}` - файл с javascript для подключения на фронте.
12 |
13 | ## Заказ
14 |
15 | Содержит настройки необходимые для заказа:
16 |
17 | - `{order_handler_class}` - имя класса, который реализует логику оформления заказа.
18 | - `{order_resource_id}` - - идентификатор страницы, на которую будет произведен редирект после оформление заказа.
19 |
--------------------------------------------------------------------------------
/docs/components/userevents/interface/statuses.md:
--------------------------------------------------------------------------------
1 | # Статусы
2 |
3 | ## Создать / Изменить статус
4 |
5 | Для создании статусы необходимо задать название. Указать флаг активности и резерва.
6 | Дефолтные статусы:
7 |
8 | - `новое` - задается при создании
9 | - `активно` - характеризует активность
10 | - `завершено` - характеризует завершенность
11 | - `отменено` - характеризует неактивность
12 |
13 | Возможно создание статусов для реализации своей логики работы компонента.
14 | Наличие флага `резерв` у события запрещает создание другого события на данное время.
15 |
16 | ## Смена статуса
17 |
18 | Сменить статус можно из админки сайта, либо задействовав какой либо обработчик.
19 |
--------------------------------------------------------------------------------
/docs/components/userevents/snippets/index.md:
--------------------------------------------------------------------------------
1 | # Сниппеты
2 |
3 | Все сниппеты UserEvents работают при помощи pdoTools и рассчитывают на использование [Fenom][010103] в чанках.
4 |
5 | Это позволяет:
6 |
7 | - сократить общее количество чанков
8 | - повысить удобство работы
9 | - ускорить работу
10 | - делать более сложные чанки, за счёт продвинутой проверки условий через функции Fenom
11 |
12 | [010103]: /components/pdotools/parser
13 |
--------------------------------------------------------------------------------
/docs/components/xcalc/field-types.md:
--------------------------------------------------------------------------------
1 | # Типы полей
2 |
3 | Компонент имеет список типов полей, каждое из которых работает по своему.
4 |
5 | ## Radio
6 |
7 | Одиночный выбор. Пожалуй, самый востребованный тип поля во многих калькуляторах. Тип msProducts частично реализован на нём.
8 |
9 | ## Checkbox
10 |
11 | Множественный выбор или вообще без выбора значения. Можно использовать для каких-то дополнительных опций.
12 |
13 | ## msProducts
14 |
15 | Данный тип поля позволяет вывести список товаров с возможностью выбора одного из них для использования его цены в расчёте.
16 |
17 | ## Number
18 |
19 | Числовое поле. Можно использовать для указания длины/ширины/высоты/кол-ва и т.п.
20 |
21 | ## Text
22 |
23 | Текстовое поле. Можно использовать для указания комментария или чего-то подобного.
24 |
--------------------------------------------------------------------------------
/docs/components/xcalc/jquery-events.md:
--------------------------------------------------------------------------------
1 | # jQuery события
2 |
3 | Подобная логика позволяет навесить свой JS код на фронт-энд события калькулятора.
4 |
5 | ## xccResultsResponse
6 |
7 | Сработает при успешном/неуспешном расчёте.
8 |
9 | ## Пример
10 |
11 | ```js
12 | $(document).ready(function() {
13 | $(document).on('xccResultsResponse', function (e, response, $form, propkey) {
14 | if (response.success) {
15 | console.log('response', response); // ответ сервера
16 | console.log('$form', $form); // jQuery объект формы
17 | console.log('propkey', propkey); // ключ текущего калькулятора
18 |
19 | let $wrap = $form.closest('[data-xcc-propkey="' + propkey + '"]');
20 | console.log('$wrap', $wrap); // блок-обёртка
21 | }
22 | });
23 | });
24 | ```
25 |
--------------------------------------------------------------------------------
/docs/components/xcalc/snippets/xcalc.md:
--------------------------------------------------------------------------------
1 | # xCalc
2 |
3 | Основной сниппет компонента, который реализует вывод формы калькулятора на фронт-энде.
4 |
5 | ## Параметры
6 |
7 | | Название | По умолчанию | Описание |
8 | | -------------- | ------------------- | ----------------------------------------- |
9 | | **id** | `0` | ID калькулятора, который будем рендерить. |
10 | | **tplOuter** | `tpl.xCalc.outer` | Чанк вывода калькулятора. |
11 | | **tplResults** | `tpl.xCalc.results` | Чанк вывода результатов расчёта. |
12 |
13 | ## Пример
14 |
15 | ```fenom
16 | {'!xCalc' | snippet : [
17 | 'id' => 1,
18 | 'tplOuter' => 'tpl.xCalc.outer',
19 | 'tplResults' => 'tpl.xCalc.results',
20 | ]}
21 | ```
22 |
--------------------------------------------------------------------------------
/docs/components/xparser/cron.md:
--------------------------------------------------------------------------------
1 | # Скрипт запуска заданий из Cron
2 |
3 | Скрипт, запускающий задания на парсинг. Можно запускать, как из консоли (например, крон), так и из веба.
4 |
5 | ## Пример задания для крона
6 |
7 | ```shell
8 | 0 2 * * * php /home_path/core/components/xparser/cron/parser.php ids debug_mode
9 | ```
10 |
11 | - **ids** - id задания, которое необходимо запустить. Можно несколько, через запятую. Можно не указывать (будет запущено всё активное).
12 | - **debug_mode** - 1 или 0, в зависимости от того, запускаем ли мы скрипт в дебаг режиме.
13 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparseronafterpagescollected.md:
--------------------------------------------------------------------------------
1 | # xParserOnAfterPagesCollected
2 |
3 | **Событие доступно с версии 1.11.25**.
4 |
5 | После обхода всех страниц задания и получения обработанных полей, но **перед** получением полей подзаданий.
6 |
7 | Одно из интересных событий, т.к. позволяет менять данные статей, возвращая массив `$rows` в плагине:
8 |
9 | ```$modx->event->returnedValues['rows'] = $rows;```
10 |
11 |
12 | ## Параметры
13 |
14 | - `xParser $xp` — экземпляр основного класса компонента,
15 | - `xpParser $parser` — экземпляр класса парсера,
16 | - `array $task` — массив задания,
17 | - `array $rows` — массив со списком обработанных статей.
18 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparseronbeforetaskactions.md:
--------------------------------------------------------------------------------
1 | # xParserOnBeforeTaskActions
2 |
3 | После формирования списка статей с данными из подзаданий. Перед добавлением ресурсов.
4 |
5 | _Пожалуй, самое интересное событие, т.к. позволяет менять данные у статей либо вообще остановить задание парсинга, ничего при этом не добавив._
6 |
7 | ## Параметры
8 |
9 | - `xParser $xp` — экземпляр основного класса компонента,
10 | - `xpParser $parser` — экземпляр класса парсера,
11 | - `array $task` — массив задания,
12 | - `array $rows` — массив со списком обработанных статей.
13 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparseronbeforetaskparse.md:
--------------------------------------------------------------------------------
1 | # xParserOnBeforeTaskParse
2 |
3 | После получения данных страницы и разбора её на список статей для парсинга. Перед обработкой списка полей.
4 |
5 | Срабатывает, только если это не подзадача и не в режиме "Вернуть значение поля".
6 |
7 | **С версии 1.8.11** позволяет скорректировать список статей для парсинга изменив возвращаемый параметр `$items`.
8 |
9 | ## Параметры
10 |
11 | - `xParser $xp` — экземпляр основного класса компонента,
12 | - `xpParser $parser` — экземпляр класса парсера,
13 | - `array $task` — массив задания,
14 | - `array $items` — массив со списком необработанных статей,
15 | - `array $fields` — массив со списком полей для обработки статей и получения необходимых данных.
16 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparseronfiltersourceitems.md:
--------------------------------------------------------------------------------
1 | # xParserOnFilterSourceItems
2 |
3 | ::: tip
4 | Событие доступно с версии 1.8.12
5 | :::
6 |
7 | Сразу после получения чистых данных из источника и разбиения их на список статей.
8 |
9 | Срабатывает в любом случае: и для подзадач, и в режиме "Вернуть значение поля", и для всего остального.
10 |
11 | Не сработает, только если из источника ничего не получено, то есть параметр `$items` пуст.
12 |
13 | Позволяет скорректировать список статей для парсинга изменив возвращаемый параметр `$items`.
14 |
15 | ## Параметры
16 |
17 | - `xParser $xp` — экземпляр основного класса компонента,
18 | - `xpParser $parser` — экземпляр класса парсера,
19 | - `array $task` — массив задания,
20 | - `array $items` — массив со списком необработанных статей.
21 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparserontaskitemparse.md:
--------------------------------------------------------------------------------
1 | # xParserOnTaskItemParse
2 |
3 | После обработки списка полей. Перед получением данных из подзадания, если таковое есть.
4 |
5 | ## Параметры
6 |
7 | - `xParser $xp` — экземпляр основного класса компонента,
8 | - `xpParser $parser` — экземпляр класса парсера,
9 | - `array $task` — массив задания,
10 | - `string $item` — строка с необработанным кодом статьи,
11 | - `array $row` — массив с обработанными полями статьи.
12 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparserontaskparsedone.md:
--------------------------------------------------------------------------------
1 | # xParserOnTaskParseDone
2 |
3 | **Событие доступно с версии 1.8.15**.
4 |
5 | По окончанию парсинга задания.
6 |
7 | Будет запущено один раз, если пагинация выключена или включен режим пагинации _"Сначала собрать все данные, а потом перейти к действиям с ресурсами"_.
8 |
9 | Будет запущено для каждой страницы отдельно при включённом режиме пагинации _"Выполнять действия с ресурсами, по мере посещения страниц парсером"_.
10 |
11 | ## Параметры
12 |
13 | - `xParser $xp` — экземпляр основного класса компонента,
14 | - `xpParser $parser` — экземпляр класса парсера,
15 | - `array $task` — массив задания,
16 | - `array $stats` — массив со статистикой отработанного задания.
17 |
--------------------------------------------------------------------------------
/docs/components/xparser/events/xparserontaskrowsprepared.md:
--------------------------------------------------------------------------------
1 | # xParserOnTaskRowsPrepared
2 |
3 | **Событие доступно с версии 1.11.8**.
4 |
5 | После формирования обработанных данных ресурса, но **перед** скачиванием медиа-контента.
6 |
7 | Одно из интересных событий, т.к. позволяет менять данные статей, возвращая массив `$rows` в плагине:
8 |
9 | ```$modx->event->returnedValues['rows'] = $rows;```
10 |
11 |
12 | ## Параметры
13 |
14 | - `xParser $xp` — экземпляр основного класса компонента,
15 | - `xpParser $parser` — экземпляр класса парсера,
16 | - `array $task` — массив задания,
17 | - `array $rows` — массив со списком обработанных статей.
18 |
--------------------------------------------------------------------------------
/docs/components/xparser/gallery.md:
--------------------------------------------------------------------------------
1 | # Работа с галереями
2 |
3 | С версии 1.5.0 компонент поддерживает работу с ms2Gallery и miniShop2 галереями.
4 |
5 | ## Пример
6 |
7 | Выгружать изображения в компонент-галерею достаточно просто. Нужно все изображения собрать в JSON массив при помощи Fenom.
8 |
9 | Таким кодом я собрал все изображения, используемые в контенте спарсенной записи, в JSON массив:
10 |
11 | ```fenom
12 | @INLINE {($content | preg_get_all : '!https?://[^"]+\.(?:jpe?g|png|gif)!Ui') | toJSON}
13 | ```
14 |
15 | На выходе, компонент превращает его в обычный массив PHP и по-очереди выгружает в галерею.
16 |
17 | Важно, чтобы отдаваемый в поле галереи JSON, был такого вида:
18 |
19 | ```json
20 | ["http://site.ru/image1.jpg","http://site.ru/image2.jpg", ...]
21 | ```
22 |
23 | Тогда все эти изображения попадут в выбранную вами галерею.
24 |
--------------------------------------------------------------------------------
/docs/components/xparser/minishop2.md:
--------------------------------------------------------------------------------
1 | # Работа с miniShop2 товарами
2 |
3 | С версии 1.5.0 в компонент добавлена поддержка свойств/опций miniShop2 товаров.
4 | Начиная с этой версии появилась возможность парсить товары магазина.
5 |
6 | ## Особенности
7 |
8 | Есть ряд особенностей, которые следует соблюдать, при создании miniShop2 товаров при помощи xParser.
9 |
10 | 1. В конфигурации задания нужно выбрать раздел с типом «Категория товаров».
11 | 2. В полях задания нужно создать поле **resource | class_key**, со значением по-умолчанию: `msProduct`
12 | 3. Для корректной выгрузки таких полей, как `tags`, `color`, `size` и т.п. при создании полей задания была добавлена настройка **Раскодировать JSON строку в массив**. Дело в том, что при создании товаров через процессор, miniShop2 ждет от нас PHP массив для этих полей, поэтому для корректной выгрузки полей такого типа, нужно раскодировать JSON в PHP. К примеру, вот:
13 |
14 | 
15 |
16 | Все остальные действия типовые. Почитать подробнее можно в разделах:
17 |
18 | - [Парсер RSS лент][1]
19 | - [Парсер HTML контента + Совмещенные задания][2]
20 |
21 | [1]: /components/xparser/parser-rss
22 | [2]: /components/xparser/parser-html
23 |
--------------------------------------------------------------------------------
/docs/components/xparser/pagination.md:
--------------------------------------------------------------------------------
1 | # Пагинация
2 |
3 | С версии 1.4.0 внедрена поддержка пагинации на сайте-источнике. Теперь можно выкачивать все записи, включая самые старые.
4 |
5 | ## Интерфейс
6 |
7 | В основном окне задания появилась вкладка "Пагинация", в которой можно указать:
8 |
9 | 1. УРЛ с параметром страницы,
10 | 2. Диапазон страниц, по которым пройтись,
11 | 3. Поле со списком исключенных страниц (через запятую или пробел). *К слову, сюда пакет записывает страницы, по которым он прошел.*
12 |
13 | 
14 |
15 | ## Особенности
16 |
17 | Есть некоторые особенности по использованию и заполнению первых трёх полей.
18 |
19 | ### УРЛ с параметром страницы
20 |
21 | В этом поле можно использовать 2 параметра:
22 |
23 | 1. `{$url}` или `[[+url]]` - это основной УРЛ задания,
24 | 2. `{$page}` или `[[+page]]` - это номер страницы.
25 |
26 | ### Диапазон страниц
27 |
28 | Можно указать *от меньшего к большему* или *от большего к меньшему*, что соответственно укажет компоненту, в каком направлении производить проход.
29 |
--------------------------------------------------------------------------------
/docs/components/yandexmaps2/events/examples.md:
--------------------------------------------------------------------------------
1 | # Примеры
2 |
3 | ## Проверка карты в плагине
4 |
5 | С помощью параметра `$snippetProperties` можно проверить, из какой карты был вызван плагин:
6 |
7 | Вызов сниппета:
8 |
9 | ```fenom
10 | {'!YandexMaps2' | snippet : [
11 | 'map' => 'custom-map',
12 | ...
13 | ]}
14 | ```
15 |
16 | Код плагина:
17 |
18 | ```php
19 | switch ($modx->event->name) {
20 | case 'ymOnLoadObjects':
21 | if ($snippetProperties['map'] != 'custom-map') {
22 | break;
23 | }
24 |
25 | /**
26 | * Логика плагина
27 | */
28 |
29 | break;
30 | }
31 | ```
32 |
--------------------------------------------------------------------------------
/docs/components/yandexmaps2/events/index.md:
--------------------------------------------------------------------------------
1 | # События плагинов
2 |
3 | С версии 1.1.0 пакет приобрёл **события плагинов**. Благодаря этому появилась возможность внедрять свою логику перед выдачей объектов карте. Например, можно изменить заголовок метки или вовсе добавить свой объект в массив уже существующих объектов карты.
4 |
5 | _Список событий прописан в порядке их исполнения при работе компонента._
6 |
7 | - [ymOnLoadObjects](/components/yandexmaps2/events/ymonloadobjects)
8 | - [Примеры](/components/yandexmaps2/events/examples)
9 |
--------------------------------------------------------------------------------
/docs/components/yandexmaps2/events/ymonloadobjects.md:
--------------------------------------------------------------------------------
1 | # ymOnLoadObjects
2 |
3 | Плагин запускается на каждый ресурс отдельно. У ресурса может быть сколько угодно объектов карты.
4 |
5 | Срабатывает после загрузки списка объектов карты из базы, перед обработкой текстовых данных у объектов.
6 |
7 | ## Параметры
8 |
9 | - `array $data` — данные выборки, обычно имеют структуру:
10 |
11 | ```php
12 | Array
13 | (
14 | parent => (int)
15 | class => (string)
16 | list => (string)
17 | )
18 | ```
19 |
20 | - `array $objects` — список объектов карты,
21 | - `array $snippetProperties` — параметры сниппета, из которого вызывается подгрузка объектов.
22 |
--------------------------------------------------------------------------------
/docs/components/yandexmaps2/jquery-events.md:
--------------------------------------------------------------------------------
1 | # jQuery события
2 |
3 | С версии 1.2.0 в компонент были добавлены jQuery триггеры.
4 | Подобная логика позволяет навесить свой JS код на фронт-энд события карты.
5 |
6 | ## ymOnLoadMap
7 |
8 | Сработает при загрузке карты.
9 |
10 | ### Пример
11 |
12 | ```js
13 | $(document).ready(function() {
14 | $(document).on('ymOnLoadMap', function(e, ym2, map) {
15 | console.log('ym2', ym2); // Экземпляр класса YandexMaps2
16 | console.log('map', map); // Объект карты
17 | });
18 | });
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/components/yandexmaps2/map-constructor.md:
--------------------------------------------------------------------------------
1 | # Конструктор карт
2 |
3 | Вся основная работа компонента заключена в конструкторе карт. Любая карта начинается отсюда.
4 | Конструктор поддерживает 4 типа объектов:
5 |
6 | 1. Точки, метки
7 | 2. Ломаные линии
8 | 3. Многоугольники
9 | 4. Круги
10 |
11 | **Важной особенностью** использования конструктора карт в бэкенде при редактировании ресурсов/пользователей является то, что после всех изменений, необходимо сохранить объект ресурса/пользователя. Иначе изменения на карте применены **не будут**!
12 |
13 | _P.S. Библиотека конструктора для Яндекс Карт писалась мной с нуля и, вскоре, есть планы выложить ее в открытый доступ для общего пользования разработчиками._
14 |
--------------------------------------------------------------------------------
/docs/en/components/bannery/interface/banners.md:
--------------------------------------------------------------------------------
1 | # Ads
2 |
3 | - To create a Ads go to **Components** -> **BannerY**
4 | - On the tab **Ads** click **New ad** and then save the changes.
5 |
6 | [](https://file.modx.pro/files/e/6/1/e610c64fcbe0bcfc66f1e692e9cb551b.png)
7 |
8 | In the pop-up window you will need to fill:
9 |
10 | - **Name**
11 | - **Media source**
12 | - **Active**
13 | - **New image**
14 | - **URL**
15 | - **Text of banner**
16 | - **Positions** *First you need to create them.*
17 |
18 | [](https://file.modx.pro/files/b/4/1/b4158c92313074ea19310728d83191c9.png)
19 |
20 | [](https://file.modx.pro/files/b/4/7/b477805bf083372d0f4647f55330638e.png)
21 |
--------------------------------------------------------------------------------
/docs/en/components/bannery/interface/positions.md:
--------------------------------------------------------------------------------
1 | # Positions
2 |
3 | - To create a position, go to **Components** -> **BannerY**
4 | - On the tab **Positions** click **New position** and then save the changes.
5 |
6 | [](https://file.modx.pro/files/e/a/d/eada167eaf16509c676548a84430f284.png)
7 |
8 | [](https://file.modx.pro/files/2/0/f/20f18bbeae2329f068cb16bc77368388.png)
9 |
10 | [](https://file.modx.pro/files/f/7/8/f7833d45e234d2e63d571a9d71b933e4.png)
11 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/form/index.md:
--------------------------------------------------------------------------------
1 | # Form Layouts
2 |
3 | Below is a list of the form markup of popular CSS frameworks.
4 |
5 | - [Bootstrap](/en/components/fetchit/examples/form/bootstrap)
6 | - [Bulma](/en/components/fetchit/examples/form/bulma)
7 | - [UIkit](/en/components/fetchit/examples/form/uikit)
8 | - [Fomantic-UI](/en/components/fetchit/examples/form/fomantic)
9 | - [Pico.css](/en/components/fetchit/examples/form/pico)
10 | - [Cirrus CSS](/en/components/fetchit/examples/form/cirrus)
11 | - [turretcss](/en/components/fetchit/examples/form/turretcss)
12 | - [Vanilla](/en/components/fetchit/examples/form/vanilla)
13 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/modals/index.md:
--------------------------------------------------------------------------------
1 | # Modals
2 |
3 | This section provides a list of examples of FetchIt integration with modal window plugins.
4 |
5 | - [Bootstrap](/en/components/fetchit/examples/modals/bootstrap)
6 | - [tingle.js](/en/components/fetchit/examples/modals/tinglejs)
7 | - [Micromodal.js](/en/components/fetchit/examples/modals/micromodaljs)
8 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/modals/micromodaljs.md:
--------------------------------------------------------------------------------
1 | # Micromodal.js
2 |
3 | In this section, let's take a few examples with [Micromodal.js](https://micromodal.vercel.app/) modals.
4 |
5 | ## Closing a modal
6 |
7 | If your form is in a modal window and you would like to close it after a successful form submission, you should use the [`fetchit:success`](/en/components/fetchit/frontend/events#fetchitsuccess) event to solve the issue.
8 |
9 | ```js
10 | document.addEventListener('fetchit:success', ({ detail }) => {
11 | const { form } = detail;
12 |
13 | // Define the ID of the window relative to the form
14 |
15 | MicroModal.close('modal-id');
16 | });
17 | ```
18 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/modals/tinglejs.md:
--------------------------------------------------------------------------------
1 | # tingle.js
2 |
3 | In this section, let's see an example of working with modal windows [tingle.js](https://tingle.robinparisi.com/).
4 |
5 | ## Opening a modal
6 |
7 | If you have the task of opening a modal window after a successful form submission, it can be solved in two ways:
8 |
9 | 1. Using the [`fetchit:success`](/en/components/fetchit/frontend/events#fetchitsuccess) event.
10 |
11 | ```js
12 | const successModal = new tingle.modal();
13 |
14 | document.addEventListener('fetchit:success', ({ detail: { response: { message } } }) => {
15 | successModal.setContent(message);
16 | successModal.open();
17 | });
18 | ```
19 |
20 | 2. With [`FetchIt.Message`](/en/components/fetchit/frontend/class#fetchitmessage).
21 |
22 | ```js
23 | const successModal = new tingle.modal();
24 |
25 | FetchIt.Message = {
26 | // ...
27 | success (message) {
28 | successModal.setContent(message);
29 | successModal.open();
30 | },
31 | }
32 | ```
33 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/notifications/index.md:
--------------------------------------------------------------------------------
1 | # Notifications
2 |
3 | Although **FetchIt** doesn't have any dependencies, everything is prepared to plug in any off-the-shelf or your own library for displaying messages with minimal code.
4 |
5 |
6 |
7 | - [Notyf](/en/components/fetchit/examples/notifications/notyf)
8 | - [SweetAlert2](/en/components/fetchit/examples/notifications/sweetalert2)
9 | - [iziToast](/en/components/fetchit/examples/notifications/izitoast)
10 | - [Notiflix.Notify](/en/components/fetchit/examples/notifications/notiflix-notify)
11 | - [Notie](/en/components/fetchit/examples/notifications/notie)
12 | - [Awesome Notifications](/en/components/fetchit/examples/notifications/awesome-notifications)
13 | - [Toastify JS](/en/components/fetchit/examples/notifications/toastifyjs)
14 | - [AlertifyJS](/en/components/fetchit/examples/notifications/alertifyjs)
15 | - [PNotify](/en/components/fetchit/examples/notifications/pnotify)
16 | - [toastr](/en/components/fetchit/examples/notifications/toastr)
17 | - [jGrowl](/en/components/fetchit/examples/notifications/jgrowl)
18 | - [NOTY](/en/components/fetchit/examples/notifications/noty)
19 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/examples/validation/index.md:
--------------------------------------------------------------------------------
1 | # Validation
2 |
3 | List of examples of FetchIt integration with popular validation libraries.
4 |
5 | - [Iodine](/en/components/fetchit/examples/validation/iodine)
6 | - [yup](/en/components/fetchit/examples/validation/yup)
7 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/parts/action.info.md:
--------------------------------------------------------------------------------
1 | ::: info INFO
2 | Markup validators still swear by the empty `action` attribute, so you must specify a link to the page in it.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/parts/notifier.tip.md:
--------------------------------------------------------------------------------
1 | ::: tip TIP
2 | From version 1.1.0 and 3.1.0 a system setting [`fetchit.frontend.default.notifier`](/en/components/fetchit/settings#fetchitfrontenddefaultnotifier) is available, if enabled, which will display popup notifications [Notyf](/en/components/fetchit/examples/notifications/notyf).
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/parts/validation.warning.md:
--------------------------------------------------------------------------------
1 | ::: danger DANGER
2 | Client-side validation is insecure and should only be implemented for the convenience of the user.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/en/components/fetchit/settings.md:
--------------------------------------------------------------------------------
1 | # Settings
2 |
3 | FetchIt has several settings for ease of use.
4 |
5 | ## `fetchit.frontend.js`
6 |
7 | - Default: `[[+assetsUrl]]js/default.min.js`
8 |
9 | The JavaScript file to include on the frontend.
10 |
11 | ## `fetchit.frontend.js.classname`
12 |
13 | - Default: `FetchIt`
14 |
15 | The JavaScript class name whose instance will be responsible for form processing.
16 |
17 | ## `fetchit.frontend.input.invalid.class`
18 |
19 | CSS class that will be added to invalid input field.
20 |
21 | ## `fetchit.frontend.custom.invalid.class`
22 |
23 | CSS class that will be added to invalid custom element.
24 |
25 | ## `fetchit.frontend.default.notifier`
26 |
27 | - Default: `false`
28 |
29 | Load the default notification library.
30 |
--------------------------------------------------------------------------------
/docs/en/components/formalicious/categories.md:
--------------------------------------------------------------------------------
1 | # Categories
2 |
3 | Organising your forms from the start is highly recommended. You can do this by creating Form Categories.
4 | Categories allow you to group forms into tabs.
5 |
6 | Create tabs by going to the Formalicious page in the Extras-menu and click on **Admin panel**.
7 |
8 | Manage your **Categories** in the first tab. The category-name will be displayed as the tab-name, followed by the description,
9 | which can be used to explain to your users what the category is used for.
10 |
--------------------------------------------------------------------------------
/docs/en/components/formalicious/faqs.md:
--------------------------------------------------------------------------------
1 | # FAQs
2 |
3 | We're collecting the questions we get most often into a list of FAQs.
4 |
5 | ## How do I show my created form?
6 |
7 | Make sure that you marked your form as Published, and then add the following snippet call where you want the form to appear (without the spaces):
8 |
9 | ```modx
10 | [[!renderForm? &form=`FORM ID HERE`]]
11 | ```
12 |
13 | You can also use a template variable to select the form, and to place the template variable value in the form property.
14 |
15 | ## I want to setup custom validation per field
16 |
17 | This can be accomplished by going to the creating (or editing) a field-type in the admin-panel.
18 | You can mention a comma-separated list of FormIt-validators in the **Validation** field in the dialog-window.
19 |
20 | ## I don't like the emails sent by Formalicious
21 |
22 | Everything is customizable by using chunks or FormIt parameters.
23 | First, create a duplicate of the email-chunk (`emailFormTpl` or `fiarTpl`) you wish to change and rename it.
24 | Then go to the form which should use this new chunk.
25 |
26 | Go to the **Advanced** section and click **Add parameter**.
27 | Set the parameter-key to **emailTpl** or **fiarTpl** and set the value to the chunk you just made.
28 |
--------------------------------------------------------------------------------
/docs/en/components/formalicious/media-sources.md:
--------------------------------------------------------------------------------
1 | # Media Sources
2 |
3 | Formalicious contains one **System Setting**: `formalicious.source`, which defaults to `1`.
4 | This is the default **Filesystem** media source.
5 |
6 | Set this to the media source ID you wish to use when selecting email-attachments for auto-replies.
7 |
8 | You can find an overview of all your media sources by clicking **Media Sources** in the **Media** menu.
9 |
10 | The first column in the media sources table can be used as the ID of the `formalicious.source` setting.
11 |
--------------------------------------------------------------------------------
/docs/en/components/hybridauth/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: HybridAuth
3 | description: Authorization through social networks and other services
4 | logo: https://modstore.pro/assets/extras/hybridauth/logo-lg.jpg
5 | author: biz87
6 | modstore: https://en.modstore.pro/packages/users/hybridauth
7 | modx: https://extras.modx.com/package/hybridauth
8 | repository: https://github.com/modx-pro/modx-hybridauth
9 |
10 | items: [
11 | {
12 | text: 'Snippets',
13 | items: [
14 | { text: 'HybridAuth', link: 'snippets/hybridauth', },
15 | { text: 'haProfile', link: 'snippets/haprofile', },
16 | ],
17 | },
18 | ]
19 | ---
20 | # HybridAuth
21 |
22 | Component for authorization through social and other services.
23 |
24 | Main advantage is work with services without moderators, and ability to bind several services to one account.
25 |
--------------------------------------------------------------------------------
/docs/en/components/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Extras
3 | layout: page
4 | sidebar: false
5 | ---
6 |
7 |
8 |
--------------------------------------------------------------------------------
/docs/en/components/minishop2/parts/tip-general-properties.md:
--------------------------------------------------------------------------------
1 | ::: tip Tip
2 | Another [pdoTools general parameters](/en/components/pdotools/general-properties) may be used.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/en/components/minishop2/snippets/index.md:
--------------------------------------------------------------------------------
1 | # Snippets
2 |
3 | All the snippets of miniShop2 work with [pdoTools][1] and count on [Fenom][2] using in chunks.
4 |
5 | I.e. they, for example, do not process cart goods, but simply transfer product array to the chunk.
6 | This allows:
7 |
8 | - reduce the total number of chunks
9 | - improve convenience (to edit cart in 1 place instead of 3)
10 | - accelerate (to parse only 1 chunk, not 3 - 10 depending of cart goods)
11 | - complicate chunks using advanced verification of conditions through Fenom functions
12 |
13 | miniShop2.4 is the first MODX component which uses Fenom syntax chunks only.
14 |
15 | - [msProducts](/en/components/minishop2/snippets/msproducts)
16 | - [msCart](/en/components/minishop2/snippets/mscart)
17 | - [msOrder](/en/components/minishop2/snippets/msorder)
18 | - [msMiniCart](/en/components/minishop2/snippets/msminicart)
19 | - [msGetOrder](/en/components/minishop2/snippets/msgetorder)
20 | - [msGallery](/en/components/minishop2/snippets/msgallery)
21 | - [msOptions](/en/components/minishop2/snippets/msoptions)
22 | - [msProductOptions](/en/components/minishop2/snippets/msproductoptions)
23 |
24 | [1]: /en/components/pdotools/
25 | [2]: /en/components/pdotools/parser
26 |
--------------------------------------------------------------------------------
/docs/en/components/minishop2/snippets/msminicart.md:
--------------------------------------------------------------------------------
1 | # msMiniCart
2 |
3 | The simple snippet for cart current status display.
4 |
5 | 
6 |
7 | ## Parameters
8 |
9 | Parameter | By default | Description
10 | ----------|------------------|-----------------
11 | **tpl** | `tpl.msMiniCart` | Formatting chunk
12 |
13 | ## Formatting
14 |
15 | Snippet counts on the work with [chunk Fenom][1]. It transfers the cart status of the user's session there.
16 | As usual there are:
17 |
18 | - **total_count** - total number of goods in the cart
19 | - **total_cost** - total cost of the goods in the cart
20 |
21 | ::: info Info
22 | These data are subject to change, if the expanded cart class is used
23 | :::
24 |
25 | Standard chunk contains two element blocks with `empty` and `not_empty` classes, displayed for different cart statuses accordingly.
26 |
27 | [1]: /en/components/pdotools/parser
28 |
--------------------------------------------------------------------------------
/docs/en/components/ms2gallery/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: ms2Gallery
3 | description: The gallery for any resource in separate tab
4 | logo: https://modstore.pro/assets/extras/ms2gallery/logo-lg.jpg
5 | author: ilyautkin
6 | modstore: https://en.modstore.pro/packages/photos-and-files/ms2gallery
7 |
8 | items: [
9 | {
10 | text: 'Snippets',
11 | items: [
12 | { text: 'ms2Gallery', link: 'snippets/ms2gallery' },
13 | { text: 'ms2GalleryResources', link: 'snippets/ms2galleryresources' },
14 | ],
15 | },
16 | { text: 'Preview generation', link: 'preview-generation' },
17 | { text: 'Integration', link: 'integration' },
18 | { text: 'Images on a page', link: 'output' },
19 | {
20 | text: 'Examples',
21 | items: [
22 | { text: 'Console import', link: 'examples/console-import' },
23 | { text: 'Bootstrap3 Slider', link: 'examples/bootstrap3-slider' },
24 | ],
25 | },
26 | ]
27 | ---
28 | # ms2Gallery
29 |
--------------------------------------------------------------------------------
/docs/en/components/msearch2/interface/dictionaries.md:
--------------------------------------------------------------------------------
1 | # Dictionaries
2 |
3 | When you first install the component, you download Russian and English dictionary
4 | phpMorphy][1]. On this page you can add something or delete what you don’t need.
5 |
6 | [](https://file.modx.pro/files/4/6/3/463bce72ece4e0c7d08127daac334426.png)
7 |
8 | In order for mSearch2 to work normally you will need at least one morphological dictionary. phpMorphy [has 5 dictionaries][2]:
9 |
10 | - Russian
11 | - English
12 | - German
13 | - Ukrainian
14 | - Estonian
15 |
16 | Dictionaries are downloaded from SourceForge. This process depends on your server connection. You can choose a mirror near to it.
17 |
18 | [](https://file.modx.pro/files/f/e/2/fe2a6450aaf85a054c506cef07a5ed84.png)
19 |
20 | [1]: http://phpmorphy.sourceforge.net/dokuwiki/
21 | [2]: http://sourceforge.net/pro\jects/phpmorphy/files/phpmorphy-dictionaries/0.3.x/
22 |
--------------------------------------------------------------------------------
/docs/en/components/msearch2/interface/queries.md:
--------------------------------------------------------------------------------
1 | # Queries
2 |
3 | Page that shows what your visitors are looking for.
4 |
5 | [](https://file.modx.pro/files/c/c/a/cca0d3b1ab820fc40997e80b89cd6323.png)
6 |
7 | Here you see a list of all queries, how many times they were made and how many results were found.
8 | This information helps you to optimize your index and [synonyms][1] for your visitors to find something always.
9 |
10 | By the way, these very queries work in autoprompts of **queries** regime of snippet [mSearchForm][2].
11 |
12 | [1]: http://phpmorphy.sourceforge.net/dokuwiki/
13 | [2]: /en/components/msearch2/snippets/msearchform
14 |
--------------------------------------------------------------------------------
/docs/en/components/msearch2/interface/search.md:
--------------------------------------------------------------------------------
1 | # Search
2 |
3 | Control system page for checking how search through the site works.
4 |
5 | [](https://file.modx.pro/files/f/2/8/f285fee4cd4b72561c289f38fd1677b4.png)
6 |
7 | Here you search by that same algorithm that is used by snippets [mSearch2][1] \\ [mFilter2][2], but you can also show all resources, including remote and unpublished ones.
8 | Resources that don’t have the corresponding parameter ‘searchable’ matched don’t participate in search.
9 |
10 | This page has an interesting feature: it gives you an opportunity to go to the page of a result found in admin area.
11 | That is, **mSearch2 adds morphological search of full value to your control system MODX**.
12 |
13 | [1]: /en/components/msearch2/snippets/msearch2
14 | [2]: /en/components/msearch2/snippets/mfilter2
15 |
--------------------------------------------------------------------------------
/docs/en/components/msearch2/interface/synonyms.md:
--------------------------------------------------------------------------------
1 | # Synonyms
2 |
3 | Here you can indicate synonyms for your visitors’ queries.
4 |
5 | The system is easy: if there is a word in a query that is indicated here, its synonym is added to it.
6 | There can be as many synonyms as you want. Not only can they be added to the original word, they can also replace it.
7 |
8 | This can help you to correct common misspellings in products’ names and so on.
9 |
10 | For example, if you have whiskas product, you can add following records to it:
11 |
12 | - wiskas
13 | - уискас
14 | - вискас
15 | - etc. – see your [queries][1]
16 |
17 | [](https://file.modx.pro/files/b/4/1/b410ec7991a617845ec86913310527fc.png)
18 |
19 | You can know by what words search is done if you activate parameter
20 | **&showLog** of snippet [mSearch2][2].
21 |
22 | [1]: /en/components/msearch2/interface/queries
23 | [2]: /en/components/msearch2/snippets/msearch2
24 |
--------------------------------------------------------------------------------
/docs/en/components/msproductremains/remains-page.md:
--------------------------------------------------------------------------------
1 | # Remains Page
2 |
3 | Apart from editing remains directly when editing a product, they can also be managed on an extra page that can be found in the upper menu bar of the website control panel using the following path: `Applications -> miniShop2 -> Remains`.
4 |
5 | [](https://file.modx.pro/files/6/7/8/6782f3a9e0bb917e6bb5ac150027fd12.png)
6 |
7 | The table displays all entries from the remains table. So you can also find here combinations of properties that are no longer valid. Such entries can be removed from the table unless they are needed.
8 |
9 | To edit remains, double-click the left mouse button on the number you want to change. Then a field for entering remains amounts will appear. Input a new remains amount, press Enter, and the new amount of remains will be saved in the database.
10 |
--------------------------------------------------------------------------------
/docs/en/components/msproductremains/remains-tab.md:
--------------------------------------------------------------------------------
1 | # Remains Tab
2 |
3 | After the extra is enabled, a new “Remains” tab will appear in the miniShop2 product resource. It will contain a table for remains editing.
4 |
5 | [](https://file.modx.pro/files/0/7/f/07fabf8b1eebd0e5ee0c48b5a5c4d6fa.png)
6 |
7 | To get a complete remains table, it is necessary to fill in products properties in advance (color and size by default) and save and update the remains table (or reload the page).
8 |
9 | To edit remains, double-click the left mouse button on the number you want to change. Then a field for entering remains amounts will appear. Input a new remains amount, press Enter, and the new amount of remains will be saved in the database.
10 |
--------------------------------------------------------------------------------
/docs/en/components/office/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Office
3 | description: Ajax login and profile editing. List miniShop2 orders
4 | logo: https://modstore.pro/assets/extras/office/logo-lg.png
5 | author: ilyautkin
6 | modstore: https://en.modstore.pro/packages/users/office
7 |
8 | items: [
9 | { text: 'Quick Start', link: 'quick-start' },
10 | { text: 'Work Logic', link: 'logic' },
11 | {
12 | text: 'Controllers',
13 | items: [
14 | { text: 'Authorization', link: 'controllers/auth' },
15 | { text: 'Profile', link: 'controllers/profile' },
16 | { text: 'MS2 Orders History', link: 'controllers/orders-history-minishop2' },
17 | { text: 'Remote Authorization', link: 'controllers/auth-remote' },
18 | ],
19 | },
20 | { text: 'Extra Functions', link: 'additional-functionality' },
21 | ]
22 | ---
23 | # Office
24 |
25 | MODX user account.
26 |
27 | The client can register and authorize on site through email and social media, update properties of their profile and view their [miniShop2] orders history.
28 |
29 | Thanks to [the modular architecture][logic] of the extra you can add your own controllers to create unique functions.
30 |
31 | [minishop2]: /en/components/minishop2/
32 | [logic]: /en/components/office/logic
33 |
--------------------------------------------------------------------------------
/docs/en/components/pdotools/classes/index.md:
--------------------------------------------------------------------------------
1 | # Classes
2 |
3 | As you must know, the main point of pdoTools - is speed.
4 |
5 | I developed first version of pdoTools during making of **Tickets**. It should be tickets system but at the end of development it was some kind of simple blog system with awesome ajax comments. And I really don't have enough speed with common MODX extras like getResources. So i developed my own library, without any snippets at the beginning.
6 |
7 | It stands on two ideas:
8 |
9 | 1. The query to database is built with xPDO but executing via PDO. No objects to represent selected rows.
10 | 2. Fast chunk processing. No MODX parser calls if pdoTools can parse chunk yourself.
11 |
--------------------------------------------------------------------------------
/docs/en/components/tickets/parts/tip-general-properties.md:
--------------------------------------------------------------------------------
1 | ::: tip TIP
2 | The list can be extended by the common parameters [pdoTools](/en/components/pdotools/general-properties), since Tickets works on this library.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/en/components/tickets/snippets/ticketmeta.md:
--------------------------------------------------------------------------------
1 | # TicketMeta
2 |
3 | Outputs the information about the present ticket and also allows to vote for a ticket on it's own page.
4 |
5 | ::: info Info
6 | Beginning with version 1.4.0 snippet can be used with any MODX resource
7 | :::
8 |
9 | ## Parameters of the snippet call
10 |
11 | Name | By default | Description
12 | ----------------|--------------------|------------------------------------------------------
13 | **&getSection** | `1` | To make a request in DB for getting parent section?
14 | **&getUser** | `1` | To make a request in DB for getting author's profile?
15 | **&tpl** | `tpl.Tickets.meta` | Design chunk of the information about a ticket.
16 |
17 | ## Examples of the call
18 |
19 | - Standard snippet call
20 |
21 | ```modx
22 | [[!TicketMeta]]
23 | ```
24 |
25 | - In order to take a look at all the available standard placeholders
26 |
27 | ```modx
28 | [[!TicketMeta? &tpl=``]]
29 | ```
30 |
--------------------------------------------------------------------------------
/docs/en/guide/parts/one-space.md:
--------------------------------------------------------------------------------
1 | ::: warning WARNING
2 | Note that only one space is required after `!code`, here are two to prevent processing.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/faq/categories.json:
--------------------------------------------------------------------------------
1 | {
2 | "ace": "Ace",
3 | "scripts": "Полезные скрипты",
4 | "manager-customize": "Кастомизация панели управления",
5 | "moxi": "Moxi",
6 | "tinymce-rte": "TinyMCE Rich Text Editor",
7 | "zoomx": "ZoomX"
8 | }
9 |
--------------------------------------------------------------------------------
/docs/faq/scripts/version.md:
--------------------------------------------------------------------------------
1 | ---
2 | author: alexsoin
3 | ---
4 |
5 | # Вывод версии подключаемого файла
6 |
7 | Данный модификатор для феном полезен при подключении стилей и скриптов на сайт, чтобы не получать закэшированный файл.
8 |
9 | Создаем сниппет с именем `version`
10 |
11 | ```php
12 |
23 |
24 | ```
25 |
26 | *P.S.* По следам [комментария](https://modx.pro/solutions/17860#comment-108776).
27 |
--------------------------------------------------------------------------------
/docs/guide/parts/one-space.md:
--------------------------------------------------------------------------------
1 | ::: warning
2 | После `!code` должен быть **один** пробел. В примерах для корректного вывода добавлен лишний.
3 | :::
4 |
--------------------------------------------------------------------------------
/docs/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/docs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/favicon.ico
--------------------------------------------------------------------------------
/docs/public/icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/icon-192.png
--------------------------------------------------------------------------------
/docs/public/icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/icon-512.png
--------------------------------------------------------------------------------
/docs/public/og-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/og-default.png
--------------------------------------------------------------------------------
/docs/public/placeholder-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/modx-pro/Docs/5976024868880b768c587d7082780731c7e2d67c/docs/public/placeholder-logo.png
--------------------------------------------------------------------------------
/docs/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Sitemap: https://docs.modx.pro/sitemap.xml
3 |
--------------------------------------------------------------------------------
/docs/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docs.modx.pro",
3 | "icons": [
4 | { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" },
5 | { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" }
6 | ],
7 | "theme_color": "#ffffff",
8 | "background_color": "#ffffff",
9 | "display": "standalone"
10 | }
11 |
--------------------------------------------------------------------------------
/docs/system/basics/input-filters.md:
--------------------------------------------------------------------------------
1 | # Фильтры ввода
2 |
3 | В настоящее время фильтры ввода используются при подготовке к обработке фильтров вывода. Обычно они используются только внутри движка MODX.
4 |
--------------------------------------------------------------------------------
/docs/system/basics/modifiers/index.md:
--------------------------------------------------------------------------------
1 | # Модификаторы вывода
2 |
3 | В данном разделе представлены некоторые модификаторы и примеры их использования. В примерах модификаторы применяются к плейсхолдерам, но вы должны помнить, что они могут применяться к любым тегам MODX. Убедитесь, что используемый тег выводит хоть что-то, что модификатор будет обрабатывать.
4 |
5 | ## Цепочки фильтров (Множественные модификаторы) {#chaining}
6 |
7 | Хорошим примером цепочки фильтров будет форматирование даты, например, так:
8 |
9 | ```modx
10 | [[*publishedon:strtotime:date=`%d.%m.%Y`]]
11 |
12 | ```
13 |
14 | ## Использование модификаторов вывода совместно с параметрами {#with-params}
15 |
16 | Если у тега есть параметры, то их необходимо прописывать сразу после модификатора:
17 |
18 | ```modx
19 | [[!getResources:default=`К сожалению, ничего не найдено`?
20 | &tplFirst=`blogTpl`
21 | &parents=`2,3,4,8`
22 | &tvFilters=`blog_tags==%[[!tag:htmlent]]%`
23 | &includeTVs=`1`
24 | ]]
25 | ```
26 |
--------------------------------------------------------------------------------
/docs/system/basics/output-filters.md:
--------------------------------------------------------------------------------
1 | # Фильтры вывода
2 |
3 | В Revolution фильтры вывода ведут себя так же, как и PHx в Evolution, только фильтры теперь встроены прямо в движок MODX. Синтаксис выглядит так:
4 |
5 | ```modx
6 | [[element:modifier=`value`]]
7 | ```
8 |
9 | Фильтры могут применяться последовательно. Для этого напишите их подряд (слева направо):
10 |
11 | ```modx
12 | [[element:modifier:anothermodifier=`value`:andanothermodifier:yetanother=`value2`]]
13 | ```
14 |
15 | Также фильтры могут применяться для модификации вывода сниппетов. Фильтр нужно прописывать перед всеми параметрами (перед знаком вопроса):
16 |
17 | ```modx
18 | [[mySnippet:modifier=`value`? &mySnippetParam=`something`]]
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/system/xpdo/object-model.md:
--------------------------------------------------------------------------------
1 | # Объекты xPDO
2 |
3 | Здесь будет про xPDOObject и его стандартных наследников
4 |
--------------------------------------------------------------------------------
/globals.d.ts:
--------------------------------------------------------------------------------
1 | import type { Ref } from 'vue'
2 | import type { DefaultTheme, SiteData } from 'vitepress'
3 | import type { DocsTheme } from './.vitepress/theme/types'
4 | import type { ComponentData } from './.vitepress/theme/plugins/component'
5 |
6 | declare module 'vitepress' {
7 | interface PageData {
8 | site: Ref
9 | component?: ComponentData
10 | breadcrumbs?: DefaultTheme.SidebarItem[]
11 | page?: Ref
12 | theme?: Ref
13 | }
14 | }
15 |
16 | export {}
17 |
--------------------------------------------------------------------------------
/plop-templates/multi/interface/categories.md:
--------------------------------------------------------------------------------
1 | # {{ categories }}
2 |
3 | Интерфейс "категорий" в компоненте MODX Revolution позволяет пользователям создавать и организовывать различные категории для своих контентных элементов.
4 |
5 | При создании новой категории пользователи могут задать ее название и описание, а также выбрать родительскую категорию, если это необходимо. Категории могут быть использованы для организации различных типов контента, таких как новости, блоги, статьи или галереи изображений. Это позволяет пользователям быстро находить нужный контент и упрощает процесс управления сайтом. Кроме того, интерфейс "категорий" в компоненте MODX Revolution обеспечивает простой и интуитивно понятный способ создания и добавления собственных компонентов, делая MODX Revolution гибкой и мощной CMS.
6 |
--------------------------------------------------------------------------------
/plop-templates/multi/interface/items.md:
--------------------------------------------------------------------------------
1 | # {{ items }}
2 |
3 | Интерфейс элементов компонента MODX Revolution интуитивно понятен и легок в использовании. Он позволяет пользователям изменять и настраивать свои сайты, используя различные компоненты в соответствии с их потребностями.
4 |
5 | Интерфейс позволяет пользователям легко управлять виджетами, расширениями, модулями и плагинами, а также устанавливать их через репозиторий MODX Revolution или вручную. Пользователи могут также создавать свои собственные компоненты и добавлять их в свои проекты. Это делает MODX Revolution одним из наиболее гибких и мощных CMS на рынке.
6 |
--------------------------------------------------------------------------------
/plop-templates/multi/quick-start.md:
--------------------------------------------------------------------------------
1 | # {{ quickStart }}
2 |
3 | Для создания абстрактного компонента в MODX Revolution, следуйте простым шагам:
4 |
5 | 1. Определите функциональность и ключевые особенности компонента, которые могут быть использованы в разных проектах.
6 | 2. Создайте плагин или сниппет с необходимыми параметрами и настройками.
7 | 3. Добавьте его в пакет, который можно легко установить и использовать в других проектах MODX Revolution.
8 | 4. Документируйте код и дайте краткую инструкцию по использованию.
9 |
10 | Главное преимущество абстрактных компонентов заключается в их универсальности и переносимости, что позволяет разработчикам экономить время и силы на повторной разработке.
11 |
--------------------------------------------------------------------------------
/plop-templates/multi/snippets/index.md:
--------------------------------------------------------------------------------
1 | # {{ snippets }}
2 |
3 | Абстрактные компоненты MODX Revolution - это наборы кода, которые можно использовать для создания различных компонентов, таких как сниппеты, плагины и т.д. Вот несколько примеров сниппетов абстрактного компонента MODX Revolution:
4 |
5 | - [getItems]({{ pathPrefix }}/components/{{ name }}/getitems)
6 | - [getCategories]({{ pathPrefix }}/components/{{ name }}/getcategories)
7 |
8 | Эти сниппеты являются универсальными и могут быть использованы в различных проектах без необходимости переписывать код. Они также могут быть легко настраиваемыми и расширяемыми, что делает их очень гибкими.
9 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "allowSyntheticDefaultImports": true,
7 | "resolveJsonModule": true,
8 | "types": [
9 | "vite/client"
10 | ],
11 | "typeRoots": [
12 | "./node_modules/@types/",
13 | "./types",
14 | "./node_modules"
15 | ],
16 | },
17 | "include": [
18 | ".vitepress/theme/**/*",
19 | "globals.d.ts",
20 | "node_modules/vitepress/dist/client/theme-default/components/**/*.vue"
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------