-
Notifications
You must be signed in to change notification settings - Fork 63
Модули
Структура модуля аналогична структуре той, что в папке app/
. Список подключаемых модулей CMS указывается в config/cms.php
, модули загружаются в том порядке, в котором указаны.
Пример добавления модулей
... 'modules' => [ 'modulename', // Namespace: KodiCMS\modulename, Path baseDir/modules/modulename 'ModuleName2' => [ 'path' => {relative path to module}, 'namespace' => '\\CustomNamespace\\Test\\' ] ] ...
-
config
- конфиги приложения, могут быть перезаписаны из папки/config/
-
permissions.php
- Служит для указания списка прав -
sitemap.php
- Служит для указания страниц для меню админ панели behaviors.php
Console
-
Commands
- расположение файлов консольных компанды database
-
migrations
- файлы миграции, будут запущены по командеcms:modules:migrate
seeds
-
DatabaseSeeder.php
- если существует, то будет запущен по командеcms:modules:seed
-
Helpers
- вспомогательные классы модуля Http
-
Controllers
- контроллеры модуля Middleware
-
routes.php
- роуты текущего модуля, оборачиваются в неймспейсKodiCMS\{module}
-
Observers
- Наблюдатели для моделей Eloquent Providers
-
ModuleServiceProvider.php
- Сервис провайдер (наследуемый отKodiCMS\ModulesLoader\Providers\ServiceProvider
), если есть, будет запущен в момент инициализации приложения resources
-
js
- JavaScript файлы, в этой папке происходит поиск js файлов по виртуальным путям/backend/cms/js/{script.js}
-
lang
- Файлы переводов для модуля, доступны по ключу названия модуля приведенного в нижний регистрtrans('{module}::file.key')
-
views
- Шаблоны модуля, доступны по ключу названия модуля приведенного в нижний регистрview('{module}::template')
-
packages.php
- В данном файле можно подключать свои Assets (Media) пакеты -
Services
- Сервисные контейнеры -
ModuleContainer.php
- Если данный файл существует, то он будет подключен как системный файл модуля, в котором указаны относительыне пути и действия в момент инициализации. Необходимо наследовать отKodiCMS\ModulesLoader\ModuleContainer
- CMS
- Dashboard
- Pages
- Page
- Layout
- PagePart
- Users
- User
- Role
- Permission
- Widgets
- Widget
- Blocks
- Snippet
- Filemanager
- elFinder
- Email Templates
- Email Types
Процесс загрузки приложения выглядит следующим образом:
- Запуск
KodiCMS\ModulesLoader\Providers\ModuleServiceProvider
и инициализация загрузчика модулей -
KodiCMS\CMS\Providers\RouteServiceProvider
- подключение маршрутов во всех модулях, обернутых вnamespace
текущего модуляKodiCMS\ModuleName
KodiCMS\CMS\Providers\EventServiceProvider
KodiCMS\CMS\Providers\BusServiceProvider
-
KodiCMS\CMS\Providers\ConfigServiceProvider
- загрузка конфига из БД -
KodiCMS\ModulesLoader\Providers\AppServiceProvider
- производит запуск в каждом модулеKodiCMS\{ModuleName}\Providers\ModuleServiceProvider
Загрузчик производит поиск в каждом модуле файла ModuleContainer.php
наследованного от KodiCMS\ModulesLoader\ModuleContainer
и при его наличии подключает его, в случае отсутствия используется KodiCMS\ModulesLoader\ModuleContainer.php
.
ModuleContainer
содержит основные методы, которые вызываются в каждом модуле во время запуска приложения.
Для каждого модуля устанавливаются из названия модуля приведенного к нижнему регистру неймспейсы для view
и translator
, т.е. для использования view шаблона находящегося внутри модуля его необходимо вызвать view(modulename::...)
или trans(modulename::...)
Загрузчик модулей зарегистрирован в системе как Singleton
и доступен в любом месте приложения через фасад ModulesLoader
либо app('modules.loader')
.
-
addModule($modulename. $modulepath = null, , $namespace = null)
- добавление модуля в загрузчик -
getRegisteredModules()
- получение списка объектов модулейModuleLoader::getRegisteredModules() // return [ ModuleContainerInterface $module, ... ModuleContainerInterface $moduleX ]
-
getName()
- получение названия модуля -
getNamespace()
- получение неймспейса -
getPath($subpath = NULL)
- получение абсолютного пути до модуля или пути до переданного пути относительно модуля -
getLocalePath()
- путь до языковых файлов -
getViewsPath()
- путь до шаблонов -
getConfigPath()
- путь до конфигов -
getServiceProviderPath()
- путь до сервис-провайдера
Для удобства работы с файлами модулей используется фасад ModulesFileSystem
-
getPaths($subpath = null)
- получение массива путей относительно каждого модуля. Пригодится если вам необходимо получить спиcок всех модулей у которых есть директория/modulename/resources
метод выведетModuleLoader::getPaths('resources') // return [ 'modulename' => '{dir}/modulename/resources', ... ]
-
findFile($dir, $file, $ext = null, $array = false)
- поиск определенного файла во всех модулях. Возвращает (путь|список путей) найденых файлов. Поиск файлов кешируется на 10 минут.ModuleLoader::findFile('resources/js', 'PagesController', 'js') // return {dir}/Pages/resources/js/PagesController.js ModuleLoader::findFile('resources', 'packages', 'php', true) //return [ {dir}/CMS/resources/packages.php, {dir}/Cron/resources/packages.php, {dir}/Widgets/resources/packages.php ]
Данный метод используется для поиска и подключения медиа файлов по виртуальным путям, которые хранятся внутри модулей и плагинов.
-
listFiles($directory = null, $ext = null)
- листинг файлов внутри директории каждого модуля с учетом порядка загрузки модулей. Т.е. если вым необходимо найти список всех шаблонов по относительному путиresources/snippets
Порядок загрузки модулей:
['API', 'CMS', 'Email', 'Plugins', 'Pages', 'Users', 'Cron', 'Widgets', 'Filemanager', 'Installer', 'Dashboard', {Plugins ... }, 'App']
если два модуля содержат файл с одинаковым названием snippet.php
, то в список попадет файл из того модуля, который загружен был самым последним. Т.е. по приоритету файлы в App
выше, чем в остальных модулях системы.
<pre>
ModuleLoader::listFiles('resources/snippets')
//return
[
resources/snippets/snippet.php => [splFileInfo]
]
</pre>
Данный метод используется для получения списка шаблонов и сниппетов с учетом приоритета модулей. Т.е. шаблоны и спиппеты могут находится внутри каждого модуля и плагина и также будут доступны для использования.
Для просмотра списка подключенных модулей в системе используйте консольную команду:
php artisan cms:modules:list