Загрузка плагинов из файлов
Продолжаю вчерашнюю тему про загрузку элементов из файлов. Теперь вот дошла очередь и до плагинов. Немного с ними поэкспериментировав, нашёл более менее удобный способ и для них. Получилось на мой взгляд вполне даже ничего.
Инструкция
Постараюсь описать покороче и попроще.
Шаг 1. Создаем файл плагина. Положить его можно куда угодно, но удобнее держать все элементы в одном хранилище. Оно у нас по-умолчанию в core/elements/
. Плагины будут лежать в подпапке plugins. Создаём в ней файл plugin.php. Путь получается core/elements/plugins/plugin.php
.
Содержимое будет следующее
<?php switch ($modx->event->name) { case 'OnMODXInit': if (!file_exists(MODX_BASE_PATH . $this->static_file)) break; //1. Указываем события $events = array('OnWebPagePrerender'); foreach ($events as $event) { $modx->eventMap[$event][$this->id] = $this->id; } //2. Определяем параметры плагина $props = array(); $content = @file_get_contents(MODX_BASE_PATH . $this->static_file) . "\nreturn;"; $modx->pluginCache[$this->id]['properties'] = $props; $modx->pluginCache[$this->id]['plugincode'] = $content; $modx->pluginCache[$this->id]['disabled'] = 0; // 1 - выключить плагин, 0 - включить $includeFilename = $modx->getCachePath() . 'includes/' . $this->getScriptCacheKey(). '.include.cache.php'; file_put_contents($includeFilename, $content); // Сюда можно добавить свой код для события OnMODXInit /* код */ break; // 3. Ниже пишем код для добавленных событий case 'OnWebPagePrerender': // Для проверки работоспособности выводим сообщение в журнал ошибок. $modx->log(1,'Сообщение в журнале ошибок.'); break; }
В событии OnMODXInit прописана вся логика. В комментариях подсказки.
Добавляем в массив $events нужные события. Если нужно, указываем параметры плагина. Я никогда не пользовался этим. А дальше работаем в привычном режиме — указываем case с нужными событиями, прописываем логику и т.д. Что удобно, плагин можно тут же отключить, указав disabled = 1.
Шаг 2. В админке создаём плагин с одной единственной строкой:
<?php if (!empty($this->static_file) && file_exists($this->static_file)) include_once $this->static_file;
Отмечаем для него событие OnMODXInit. Дальше нужно привязать файл к плагину:
- Отмечаем чекбокс «Статичный файл».
- В открывшемся поле выбираем наш файл или прописываем руками (core/elements/plugins/plugin.php).
- Убираем чекбокс «Статичный файл».
- Сохраняем плагин.
Для чего это нужно? Чтобы сохранить путь к статическому файлу в плагине. А чекбокс убираем, чтобы он не синхронизировал файл с базой.
В принципе, можно в базе в таблице modx_site_plugins у нашего плагина в поле static_file прописать путь к файлу — «core/elements/plugins/plugin.php». Кому как удобнее.
Вот в общем-то и всё. Теперь можно спокойно кодить в любимом IDE редакторе, всё изменения сразу же применяются. По-моему, получилось достаточно просто.
П.С. Сразу оговорюсь, что я тестировал только на фронте. Но по идее всё должно работать и в бэкэнде.
Заключение
Теперь вся разработка вынесена наружу. В админку теперь нужно заходить только для того, чтобы связать шаблоны и плагины с файлами. Но это разовое мероприятие.
Я использую описанную концепцию на этом сайте. Реально, очень удобно. В админке остались только элементы установленных пакетов. Все мои элементы теперь хранятся на диске. Скорость загрузки страниц вообще не изменилась. Админка у меня теперь только для контента.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()