- PVSM.RU - https://www.pvsm.ru -
Всем привет, в этой статье я постараюсь кратко рассказать о компонентах, которые составляют архитектуру CMS, их много (думаю все они не поместятся в статью), контроллерах, модулях, плагинах и организации подключения css, js файлов.
Основой KodiCMS является Kohana framework версии 3.3.2. Ядром системы является модуль “kodicms”, который содержит основную логику работы и расширяется с помощью наблюдателей (Observers) через модули и плагины.
*отключаемый — возможно отключение в application/init.php [7]
Основной модуль CMS, именно в нем происходит расширение стандартного функционала Kohana, содержаться базовые контроллеры для работы с Backend, конфиги, хелперы и т.д.
В системе существует несколько типов хранения настроек:
Каждый модуль, а также плагин системы может переопределять, либо добавлять новые параметры [9] в конфиг файл, поэтому было решено использовать их для хранения тех данных, которые мог бы дополнять сторонний разработчик в своем модуле или плагине, поэтому в конфиги вынесены данные для:
Т.е. при создании плагина, если необходимо добавить пункт меню (sitemap.php), новый раздел в backend (datasources.php), расширить права доступа к новым контроллерам (permissions.php) или добавить новую задачу в планировщик [18] (jobs.php) в нем создается конфиг файл.
Контроллер системы имеет несколько уровней абстракции
Давным-давно я рассказывал о такой структуре на оф. форуме kohana [27], возможно этот пост кому-нибудь покажется полезным.
Роут для этого контроллера стоит последним в списке. При вызове контроллера происходит поиск страницы по URL (запросы кешируются), далее проверка типа страницы, проверка доступа к странице, через обсерверы подключение виджетов, частей страницы и других расширений, для админа подключение профайлера в HTML шаблон (+ на будущее добавлена возможность создания тулбара через View, как в модных CMS типа Bitrix, WordPress и т.д.), кеширование на стороне браузера и указания типа страницы (в slug поле в настройках страницы можно указать расширение, например, rss.xml и вывод будет с соответствующим Content-Type).
Я нарисовал схему пути, который проходит запрос при вызове frontend контроллера, схема немного запутанная и главное не запутаться в стрелках и найти Request.
Основные media файлы системы находятся в папке cms/media.
Основной файл стилей css/common.css компилируется из LESS файлов и сторонних библиотек, среди которых Twitter Bootstrap, Font-Awesome и др., перекомпиляция происходит при включении плагина Less [29] и внесении изменений в файл less/common.less [30], он же является основным.
Главный JavaScript файл — js/backend.js [31] (возможно будет описан в одной из будущих статей)
Для подключения css и js в шаблонах используется модуль Assets, который был немного доработан, а именно, написан менеджер пакетов Assets_Package, который позволят группировать media файлы в пакеты [32]. Он же может использоваться во frontend для быстрого подключения библиотек, а также в виджетах.
// Пример использования пакетов во Frontend шаблоне
Meta::factory($page)->package(array('jquery', 'bootstrap', 'holder', 'fontawesome', 'demo-assets'));
Каждый модуль и плагин в системе также может иметь папку media с аналогичной структурой и подключаться в контроллере как cms/media/…. без указания названия модуля, поиск файлов осуществляется через Kohana::find_file и поэтому пути нахождения файлов кешируются.
Также при запросе backend контроллера происходит поиск для него javascript файла cms/media/js/controller/controller_name.js [33]
Помимо стандартных возможностей модулей (и плагинов в том числе) в них была добавлена поддержка инсталляции.
В момент запуска инсталлятора происходит поиск и вызов в каждом модуле файла install/observers.php [34], в момент инсталляции системы инсталлятор проходится по всем модулям и смотрит наличие файлов install/schema.sql [35], а затем install/dump.sql [36] а после уже запуск install/install.php [37]
Т.к. в плагинах есть возможность активации и деакцивации, то для них также добавлены install.php [38], uninstall.php [39], install/drop.sql [40], а также в файлы frontend.php [41] и backend.php [42], которые работают аналогично init.php, но подключаются во Frontend/Backend.
В остальном работа плагинов не отличается от стандартных модулей Kohana.
P.S
В предыдущей статье я забыл упомянуть о том, что для KodiCMS существует репозиторий плагинов: github.com/KodiCMS [43], его же можно увидеть в backend [44].
В следующей статье я хотел бы рассказать об устройстве одного из модулей или нескольких модулях, либо показать пример реализации простого сайта или описать возможности раздела "Гибридные данные [45]".
В общем если вам интересно что-либо узнать, пишите, постараюсь рассказать.
Автор: ButscH
Источник [46]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/cms/72044
Ссылки в тексте:
[1] Гибридные данные: https://github.com/butschster/kodicms/tree/master/cms/plugins/hybrid
[2] Категории: https://github.com/KodiCMS/plugin-categories
[3] Рейтинг документов: https://github.com/KodiCMS/plugin-rating
[4] Вспомнить пароль: https://github.com/butschster/kodicms/blob/master/cms/modules/reflinks/classes/reflink/forgot.php
[5] Подтверждение регистрации: https://github.com/butschster/kodicms/blob/master/cms/modules/reflinks/classes/reflink/register.php
[6] Sidebar: https://github.com/butschster/Kohana-sidebar
[7] application/init.php: https://github.com/butschster/kodicms/blob/master/cms/application/init.php#L40
[8] tasks: https://github.com/butschster/kodicms/tree/master/cms/modules/email_queue/classes/task/email
[9] переопределять, либо добавлять новые параметры: http://kohanaframework.org/3.3/guide/kohana/config#config-merging
[10] sitemap.php: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/config/sitemap.php
[11] behaviors.php: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/config/behaviors.php
[12] permissions.php: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/config/permissions.php
[13] datasources.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/hybrid/config/datasources.php
[14] widgets.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/hybrid/config/widgets.php
[15] search.php: https://github.com/butschster/kodicms/blob/master/cms/modules/search/config/search.php
[16] jobs.php: https://github.com/butschster/kodicms/blob/master/cms/modules/search/config/jobs.php
[17] fields.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/hybrid/config/fields.php
[18] планировщик: http://demo.kodicms.ru/backend/jobs/add
[19] System_Controller: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/classes/kodicms/controller/system/controller.php
[20] System_Security: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/classes/kodicms/controller/system/security.php
[21] System_Template: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/classes/kodicms/controller/system/template.php
[22] System_Backend: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/classes/kodicms/controller/system/backend.php
[23] System_Frontend: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/classes/kodicms/controller/system/frontend.php
[24] media: https://github.com/butschster/kodicms/tree/master/cms/modules/kodicms/media
[25] System_API: https://github.com/butschster/kodicms/blob/master/cms/modules/api/classes/controller/system/api.php
[26] Front: https://github.com/butschster/kodicms/blob/master/cms/modules/pages/classes/kodicms/controller/front.php
[27] kohana: http://forum.kohanaframework.org/discussion/10412/postroenie-arhitektury-prilozheniya
[28] Image: http://www.kodicms.ru/public/images/forum/schemes/Frontend.pdf
[29] плагина Less: https://github.com/KodiCMS/plugin-less
[30] less/common.less: https://github.com/butschster/kodicms/blob/master/cms/media/less/common.less
[31] js/backend.js: http://github.com/butschster/kodicms/blob/master/cms/media/js/backend.js
[32] группировать media файлы в пакеты: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/init.php
[33] cms/media/js/controller/controller_name.js: https://github.com/butschster/kodicms/blob/master/cms/modules/pages/media/js/controller/page.js
[34] install/observers.php: https://github.com/butschster/kodicms/blob/master/cms/modules/plugins/install/observers.php
[35] install/schema.sql: https://github.com/butschster/kodicms/blob/master/cms/modules/kodicms/install/schema.sql
[36] install/dump.sql: https://github.com/butschster/kodicms/blob/master/cms/modules/pages/install/dump.sql
[37] install/install.php: https://github.com/butschster/kodicms/blob/master/cms/modules/plugins/install/install.php
[38] install.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/test/install.php
[39] uninstall.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/hybrid/uninstall.php
[40] install/drop.sql: https://github.com/butschster/kodicms/blob/master/cms/plugins/hybrid/install/drop.sql
[41] frontend.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/maintenance/frontend.php
[42] backend.php: https://github.com/butschster/kodicms/blob/master/cms/plugins/maintenance/backend.php
[43] github.com/KodiCMS: https://github.com/KodiCMS
[44] backend: http://demo.kodicms.ru/backend/plugins/repo
[45] Гибридные данные: http://demo.kodicms.ru/backend/datasources?ds_id=2
[46] Источник: http://habrahabr.ru/post/240781/
Нажмите здесь для печати.