Задача: Создание собственных таблицы, со своей архитектурой и присоединение их к базовым таблицам MODX.
Создание компонента:
Открываем "Управление MIGX", оно находится во вкладке Пакеты - MIGX
Придумываем название пакету и вбиваем его в поле Package Name:, по своему усмотрению задаём префикс или оставляем базовый (modx_)
Нажимаем Create Package
Итого: Система выдаст сообщение об успешном создании пакета, проверить можно пройдя по пути core/components/название_пакета
Создание таблицы:
Переходим во вкладку Xml Schema
Создаем схему согласно документации
Пример:
<?xml version="1.0" encoding="UTF-8"?>
<model package="electrica" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="" phpdoc-subpackage="" version="1.1">
<object class="electricaItem" table="electrica_items" extends="xPDOSimpleObject">
<field key="id" dbtype="int" precision="10" phptype="integer" null="false" default="1"/>
<field key="title" dbtype="varchar" phptype="string" precision="100" null="false" default="" />
<field key="description" dbtype="text" phptype="string" null="false" default="" />
</object>
</model>
ВАЖНО! название пакета должно совпадать с атрибутом package тега model, в данном примере название пакета должно быть electrica
Нажимаем Save schema
Переходим во вкладку Create tables
Нажимаем Create tables
Итого: Система выдаст сообщение об успешном создании таблицы, проверить можно зайдя в phpmyadmin
Присоединение к базовым таблицам:
Открываем вкладку Package
Нажимаем Add Extension Package
Итого: Система выдаст сообщение об успешном добавлении таблицы в список базовых, проверить можно так:
Открываем Системные настройки & События
Ищем ключ extension_packages
В нём содержатся JSON-массив с пакетами расширений, который необходимо загрузить при создании экземпляра класса MODX.
Для нашего примера будет такой:
[{
"electrica":{
"path":"[[++core_path]]components/electrica/model/"
}
}]
В ряде случаев необходимо очистить кэш.
Пример присоединения своей таблицы в pdoResources:
[[pdoResources?
&parents=`0`
&where=`{
"electricaItem.id":"123"
}`
&select = `{
"electricaItem":"title,description",
"modResource":"*"
}`
&leftJoin = `{
"electricaItem": {
"class":"electricaItem",
"on": "electricaItem.id=modResource.id"
}
}`
&tpl=`@INLINE
[[+id]]
[[+title]]
[[+description]]
`
]]