
Кастомизация
Данный инструмент можно изменить под индивидуальные задачи. Для этого скопируем себе репозиторий проекта и приступим к кастомизации.
Открываем папку src, в ней находятся папки content(сами файлы) и data(данные для настройки).
Всё что помещается в папку src/content/core будет скопировано в папку core на сайте.
./src/
├── content/
│ ├── core/
│ │ └── elements/
│ │ ├── chunks/
│ │ ├── templates/
│ │ └── zoomx/
│ │ ├── controllers/
│ │ ├── plugins/
│ │ ├── snippets/
│ │ └── templates/
│ ├── pages/
│ ├── plugins/
│ ├── snippets/
│ └── templates/
└── data/
├── addons.php
├── clientConfig.php
├── plugins.php
├── providers.php
├── resources.php
├── settings.php
├── snippets.php
├── templates.php
└── tvs.phpДополнения
Для редактирования списка дополнений открываем файл src/data/addons.php. В нём видим массив с провайдерами и дополнениями:
<?php
return [
"modx.com" => [
'FormIt',
'ClientConfig',
// ...
],
"modstore.pro" => [
'Ace',
'autoRedirector',
'pdoTools',
// ...
]
];Для изменения списка дополнений ищем нужное нам дополнение на сайте провайдера (например на modstore.pro), копируем название дополнения и добавляем по аналогии с остальными дополнениями в массив к нужному провайдеру.
Системные настройки
Для редактирования списка дополнений открываем файл src/data/settings.php. В нём видим массив с ключами системных настроек и их значениями:
<?php
return [
'log_deprecated' => 0,
'locale' => 'ru_RU.utf8',
'allow_multiple_emails' => 0,
'server_protocol' => 'http',
'friendly_alias_realtime' => 1,
'friendly_alias_restrict_chars' => 'alphanumeric',
'friendly_alias_translit' => 'russian-fixed',
// ...
];Для того чтобы настройка была со значением Нет записываем в её значение 0, соответственно если нужно Да то ставим 1.
Если нужной настройки нет в списке, то открываем на сайте системные настройки, копируем название ключа, добавляем в массив и указываем нужное значение.

Плагины/Сниппеты
Для редактирования списка дополнений открываем файл src/data/plugins.php. В нём видим массив плагинов:
<?php
return [
'ignore' => [
'name' => 'ignore',
'description' => 'Обертывание выводимых данных в тег ignore',
'events' => [
'pdoToolsOnFenomInit' => []
]
],
// ...
];Ключами являются названия контента плагина, размещенного в папке src/content/plugins/ без расширения .php.

Если нужно добавить плагин, то создаём по аналогии с другими элементами массива новый плагин, в качестве ключа указываем название файла контента плагина, в name указываем название плагина, в description добавляем описание, либо оставляем пустым, в массив events добавляем события на которые подписываем плагин. Затем создаём в папке src/content/plugins/ файл с расширением .php с контентом нового плагина.
Со сниппетами всё точно также:
<?php
return [
'version' => [
'name' => 'version',
'description' => 'Вывод гет параметра времени создания у подключаемого скрипта/стиля',
]
];ClientConfig
Для редактирования списка дополнений открываем файл src/data/clientConfig.php. В нём видим массив категориями и её элементами:
<?php
return [
[
'label' => 'Основное',
'description' => '',
'items' => [
['key' => 'policy', 'xtype' => 'modx-panel-tv-file', 'label' => 'Политика конфиденциальности', 'value' => '#'],
['key' => 'year_start', 'xtype' => 'numberfield', 'label' => 'Год начала в копирайте', 'value' => date('Y')],
['key' => 'emailto', 'xtype' => 'textfield', 'label' => 'E-mail для заявок', 'value' => ''],
],
],
// ...
];В label указываем название вкладки категории, в items добавляем список полей данной вкладки.
xtype- тип поляkey- ключ по которому будет вызываться данное полеlabel- название поляvalue- значение поля(можно оставить пустым)
Добавление кастомных операций
Операция - это функция запускаемые при настройке нового сайта, например установка списка дополнений или добавление плагинов.
Чтобы добавить свою операцию, которой нет в списке шагов в функции steps нужно добавить новую функцию в класс MoxiPack, находящийся в файле ./app.php назовём её exampleStep:
<?php
// ...
class MoxiPack extends MoxiModx
{
// ...
/**
* Пример кастомной операции
*
* @return void
*/
public function exampleStep()
{
$this->log("Кастомная операция завершена");
}
// ...
}В данной функции доступен экземпляр объекта modx через обращение к $this->modx.
Также для логирования операции доступна функция $this->log принимающая текст сообщения и уровень лога, по умолчанию уровень info, также доступны уровни error и warning.
Например, для записи в лог сообщения об ошибки нужно вызвать функцию следующим образом:
$this->log("Текст ошибки", "error");Затем, чтобы данная операция отработала при настройке, её нужно добавить в массив вызовов шагов операций, находящимся в функции steps класса MoxiHelp в файле ./app.php:
<?php
// ...
class MoxiHelp
{
// ...
/**
* Возвращает массив порядка выполнения операций.
*
* @return array Массив порядка выполнения операций, включает в себе имя и описание.
*/
static function steps()
{
return [
["name" => "providers", "desc" => "Добавление поставщиков дополнений", ],
["name" => "addons", "desc" => "Установка дополнений", ],
["name" => "copyCore", "desc" => "Копирование папки core", ],
["name" => "templates", "desc" => "Добавление шаблонов", ],
["name" => "resources", "desc" => "Добавление ресурсов", ],
["name" => "settings", "desc" => "Изменение настроек", ],
["name" => "snippets", "desc" => "Добавление сниппетов", ],
["name" => "plugins", "desc" => "Добавление плагинов", ],
["name" => "tvs", "desc" => "Добавление дополнительных полей", ],
["name" => "clientConfig", "desc" => "Настройка clientConfig", ],
["name" => "exampleStep", "desc" => "Кастомная операция", ],
["name" => "managerCustomize", "desc" => "Настройка панели администрирования", ],
["name" => "renameHtaccess", "desc" => "Переименовывание ht.access в .htaccess", ],
["name" => "removeChangelog", "desc" => "Удаление changelog", ],
["name" => "clearCache", "desc" => "Очистка кэша", ],
];
}
// ...
}name- название функции, которая будет запущенаdesc- описание данной функции
Операции из данного массива выполняются поочередно начиная с самого первого, если кастомная операция должна выполнятся после окончания какого-либо события, то её нужно добавлять после данной операции. В данном примере exampleStep выполнится после операции clientConfig.
На этом добавление кастомной операции закончено.