Jump to main content Jump to doc navigation

Пользовательские классы ресурсов (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

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • A. Moreno
  • Alex
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more