Пользовательские классы ресурсов
Последнее обновление Oct 20th, 2026 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn moreПользовательские классы ресурсов (CRC) расширяют modResource и работают в MODX 3. Процессоры создания и обновления переехали вместе с остальными процессорами ядра; см. Процессоры в MODX 3.
Что такое пользовательский класс ресурсов?¶
CRC — это PHP-класс, который расширяет modResource и задаёт собственный тип ресурса для данных или приложения. В MODX четыре встроенных класса ресурсов: документы, веб-ссылки, символические ссылки и статические ресурсы. CRC может добавить тип блога, форума, альбома галереи, RSS-канала или любой другой контент, которому нужен URL.
CRC создаются расширением modResource; класс загружается через пакет расширения. Данные хранятся в modx_site_content с собственным class_key, но класс может вести себя иначе и предоставлять свой интерфейс управления.
Когда использовать¶
CRC подходят для «встроенных приложений», например типа записи блога, который размещает блог на существующем сайте MODX. Используйте их при уверенном знании объектно-ориентированного PHP и понимании, как приложение уживается с другими ресурсами в таблице.
Когда не использовать¶
Не используйте CRC, чтобы добавить несколько полей или изменить внешний вид ресурса. Для этого есть шаблоны и переменные шаблона. Не беритесь за CRC без сильного опыта разработки и когда добавления не должны отображаться во встроенных списках ресурсов.
Практическое правило: если сниппет или переменная шаблона решают задачу проще, используйте их. CRC разрабатывать сложнее.
Расширение CRC¶
CRC можно наследовать. Если класс расширяет один из встроенных классов ресурсов, задайте class_key после parent::__construct(). Встроенные конструкторы записывают в него имя своего класса, поэтому дочерний класс иначе сохранит class_key родителя.
Добавьте {class_key}CreateProcessor и {class_key}UpdateProcessor, если подклассу нужно собственное поведение сохранения. Без них MODX использует процессоры ресурсов ядра.
В MODX 3 class_key хранит имя класса с пространством имён. По умолчанию это MODX\Revolution\modDocument. Пользовательский класс должен загружаться ровно под тем именем, которое записано в class_key, например My\Blog\modBlogPost.
Использование¶
CRC выглядят как обычные ресурсы в дереве. Класс может добавлять пункты в контекстное меню дерева, например «Создать блог здесь», если задать $showInContextMenu и переопределить getContextMenuText(). Он может использовать стандартные панели редактирования или отдельный интерфейс управления.
У CRC могут быть подклассы, скрытые из меню создания, например класс записи блога под контейнером блога. Это помогает, когда множество ресурсов плохо помещается в дерево.
CRC может переопределять контроллеры, процессоры и вывод. Например, переопределите process() или getContent(), чтобы изменить результат. Любой метод modResource доступен для переопределения.
Точки расширения¶
| Элемент | Назначение |
|---|---|
process() |
Строит вывод ресурса на сайте. |
getContent() |
Возвращает исходное содержимое. |
getResourceTypeName() |
Возвращает название типа ресурса в менеджере. |
getContextMenuText() |
Возвращает пункты создания для контекстного меню дерева. |
getControllerPath() |
Возвращает каталог контроллера менеджера для типа. |
prepareTreeNode(array $node) |
Изменяет данные узла дерева ресурсов. |
$showInContextMenu |
Показывает или скрывает тип в контекстном меню дерева. |
$allowListingInClassKeyDropdown |
Разрешает смену типа ресурса через список class_key. |
$allowChildrenResources |
Разрешает дочерние ресурсы у этого типа. |
$allowDrop |
Управляет перетаскиванием типа в дереве. |
Процессоры в MODX 3¶
При создании или обновлении CRC MODX\Revolution\Processors\Resource\Create::getInstance() ищет {class_key}CreateProcessor, а процессор обновления — {class_key}UpdateProcessor. Класс должен быть совместим с API процессора ядра. На практике наследуйте процессор ядра.
Файлы процессоров из 2.x удалены:
| Старый класс | Новый класс |
|---|---|
modResourceCreateProcessor |
\MODX\Revolution\Processors\Resource\Create |
modResourceUpdateProcessor |
\MODX\Revolution\Processors\Resource\Update |
require_once для core/model/modx/processors/resource/create.class.php или update.class.php завершается ошибкой.
В 3.2.x файл core/include/deprecated.php всё ещё создаёт псевдонимы старых имён. В самом файле сказано, что псевдонимы, вероятно, уберут в 3.3 или 3.4. Расширяйте классы с пространствами имён и следите за примечаниями к обновлению.
runProcessor('resource/create') по-прежнему работает.
См. Шаг 4: настройка процессоров и Процессоры в заметках об обновлении до 3.0.
События ресурсов¶
CRC используют те же события ресурсов, что и другие типы:
| Событие | Когда срабатывает |
|---|---|
OnBeforeDocFormSave |
Перед созданием или обновлением ресурса. Непустой ответ отменяет сохранение. |
OnDocFormSave |
После сохранения ресурса. |
OnDocFormPrerender |
Во время отрисовки страницы редактирования в менеджере. |
OnResourceAddToResourceGroup |
После добавления ресурса в группу ресурсов. |
OnResourceRemoveFromResourceGroup |
После удаления ресурса из группы ресурсов. |
OnResourceDelete |
При удалении ресурса. |
OnResourceUndelete |
При восстановлении удалённого ресурса. |
OnResourceDuplicate |
После дублирования ресурса. |
OnResourceBeforeSort |
Перед изменением порядка ресурсов в дереве. |
OnResourceSort |
После изменения порядка ресурсов в дереве. |
OnResourceToolbarLoad |
Во время сборки панели инструментов ресурса. |
OnResourceCacheUpdate |
После очистки кеша ресурса. |
Создание CRC¶
Следуйте руководству Создание класса ресурсов.
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn more










