Архітектура KodiCMS

Введення

Всім привіт, у цій статті я постараюся коротко розповісти про компоненти, які складають архітектуру CMS, їх багато (думаю всі вони не помістяться в статтю), контролерах, модулі, плагіни та організації підключення css, js файлів.



Основою KodiCMS є Kohana framework версії 3.3.2. Ядром системи є модуль «kodicms», який містить основну логіку роботи і розширюється з допомогою спостерігачів (Observers) через модулі і плагіни.

Список модулів, які були розроблені CMS:
  • API — Робота з AJAX запитами, підтримує типи запитів GET, POST, PUT, DELETE. Відповідь у форматі json, або HTML
  • Behavior — розширення поведінки Frontend сторінки
  • Dashboard — робочий стіл і все що з ним пов'язано
  • Datasource — основа для створення розділів даних (за допомогою нього створені розділи Гібридні дані, ,Категорії, ,Рейтинг документів), відключається
  • elFinder — файловий менеджер, відключається
  • Email, Email _Queue — відправка пошти, масова розсилка пошти, розділи Email Backend і завдання для менеджера завдань, відключається
  • FileSystem — класи для роботи з ФС
  • Installer — Інсталятор системи
  • KodiCMS — Ядро системи
  • Navigation — Навігація в Backend
  • Page_Parts — Частини сторінок (Пов'язаний з модулем Pages за Observer), відключається
  • Pages — модуль сторінок сайту, теоретично відключається
  • Plugins — модуль плагінів, організовує розширення системи плагінами, відключається
  • Reflinks — помічник генерації тимчасових посилань, наприклад, ,Згадати пароль або Підтвердження реєстрації
  • Scheduler — Календар для Backend, а також менеджер завдань Cron, відключається
  • Search — пошук по сайту, містить драйвер повнотекстового пошуку, список можна доповнювати власними драйверами
  • Sidebar, відключається
  • Snippet — модуль організації шматків коду, які можна вставляти в шаблон, також використовується модулем «Widget» для шаблонів видежтов, відключається
  • Tags — організація тегів в модулі сторінки і Гібридних даних, відключається
  • Update — модуль оновлення системи, відключається
  • Users — користувачі системи, ACL
  • Widget — Віджети, блоки поміщаються на сторінки сайту, виводять якусь інформацію, відключається


*відключається — можливе відключення application/init.php

В системі крім розроблених мною модулів є стандартні модулі і сторонні розробки
  • Assets — для організації CSS, JavaScript
  • Breadcrumbs — генерація хлібних крихт, використовується віджетом «Хлібні крихти»
  • Captcha
  • Minion — використовується менеджером завдань для запуску запланованих завдань (завдання)
  • Pagination


Модуль KodiCMS

Основний модуль CMS, саме в ньому відбувається розширення стандартного функціоналу Kohana, містяться базові контролери для роботи з Backend, конфіги, хелпери і т.д.

Налаштування

В системі існує кілька типів зберігання налаштувань:
  • Файлові конфіги
  • Таблиця в БД, для перевизначення файлових конфіги (Кешується)
  • Окрема таблиця для зберігання інформації плагінів (Кешується)
  • Зберігання інформації User_Meta (Наприклад, набір і розташування віджетів на робочому столі), як в Wordpress і Bitrix, SugarCRM і т.д. (Кешується)


Кожен модуль, а також плагін системи може ігнорувати, або додавати нові параметри в конфіг файл, тому було вирішено використовувати їх для зберігання тих даних, які міг би доповнювати сторонній розробник у своєму модулі або плагіні, тому в конфіги винесені дані:
  • побудови sitemap адмін панелі — sitemap.php
  • вказівки можливих типів сторінок — behaviors.php
  • списку прав доступу до контролерів адмін панелі — permissions.php
  • списку розділів даних — datasources.php
  • списку доступних віджетів — widgets.php
  • список драйверів для модуля пошуку — search.php
  • списку доступних завдань для менеджера завдань Cron — jobs.php
  • списку типів полів для розділу «Гібридні дані» — fields.php
Тобто при створенні плагіна, якщо необхідно додати пункт меню (sitemap.php), новий розділ в backend (datasources.php), розширити права доступу до нових контролерів (permissions.php) або додати нову задачу планування (jobs.php) в ньому створюється конфіг файл.

Контролери

Контролер системи має декілька рівнів абстракції
  1. Порожній контролер System_Controller
  2. Security контролер перевірки прав доступу System_Security < System_Controller
  3. Template контролер відповідає за шаблони сторінок System_Template < System_Security
  4. Backend контролер System_Backend < System_Template, від якого успадковуються всі контролери для доступу до яких потрібна авторизація. У цьому контролері відбувається підключення всіх необхідних css, javascript і т.д.
  5. Frontend контролер System_Frontend < System_Template, від якого успадковуються всі контролери для доступу до яких не потрібна авторизація. (Авторизація, Згадати пароль, Сторінка помилки)
  6. Media контролер для пошуку media файлів (сss, js і т.д.) у всіх модулях і плагінах в папці media, тобто якщо в плагіні створити папку media/css і покласти в неї css файл (test.css), то до нього можна буде звернутися cms/media/css/test.css
  7. API контролер System_API < System_Ajax використовується в основному для ajax (GET, POST, PUT, DELETE) запитів, причому дій в контролері бувають також декількох типів get_..., post_..., put_..., delete_..., залежно від того, якого типу приходить запит.
  8. Front контролер для Frontend сторінок.


Давним-давно я розповідав про таку структуру на оф. форумі kohana, можливо цей пост комусь здасться корисним.

Frontend контролер

Рауса для цього контролера стоїть останнім у списку. При виклику контролера відбувається пошук сторінки з URL (запити кешируются), далі перевірка типу сторінки, перевірка доступу до сторінки, через обсерверы підключення віджетів, частин сторінки і інших розширень, для адміна підключення профайлера в HTML шаблон (+ на майбутнє додана можливість створення тулбара через View, як в модних CMS типу Bitrix, Wordpress і т.д.), кешування на стороні браузера і вказівки типу сторінки (в slug поле в настройках сторінки можна вказати розширення, наприклад, rss.xml і висновок буде з відповідним Content-Type).

Я намалював схему шлях, який проходить запит при виклику frontend контролера, схема трохи заплутана і головне не заплутатися в стрілках і знайти Request.



Організація media (css, js, less, image) файлів

Основні media файли системи знаходяться в папці cms/media.
Основний файл стилів css/common.css компілюється з LESS файлів і сторонніх бібліотек, серед яких Twitter Bootstrap, Font-Awesome та ін., перекомпіляція відбувається при включенні плагіна Less та внесення змін в файл less/common.less, він же є основним.

Головний JavaScript файл — js/backend.js (можливо буде описаний в одній з наступних статей)

Для підключення css js в шаблонах використовується модуль Assets, який був трохи доопрацьований, а саме, написаний менеджер пакунків Assets_Package, який дозволять групувати media файли в пакети. Він же може використовуватися під 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

Модулі і Плагіни

Крім стандартних можливостей модулів і плагінів в тому числі) в них була додана підтримка інсталяції.

У момент запуску інсталятора відбувається пошук і виклик в кожному модулі файлу install/observers.php, в момент інсталяції системи інсталятор проходиться по всім модулям і дивиться наявність файлів install/schema.sqlа потім install/dump.sql а після вже запуск install/install.php

Тому в плагінах є можливість активації деакцивации, то для них також додані install.php, uninstall.php, install/drop.sql, а також у файли frontend.php і backend.php, які працюють аналогічно init.php, але підключаються до Frontend/Backend.
В іншому робота плагінів не відрізняється від стандартних модулів Kohana.

S
В попередній статті я забув згадати про те, що для KodiCMS існує репозиторій плагінів: github.com/KodiCMS, його ж можна побачити в backend.

У наступній статті я хотів би розповісти про пристрій одного з модулів або декількох модулях, або показати приклад реалізації простого сайту або описати можливості розділу "Гібридні дані".
Загалом якщо вам цікаво щось дізнатися, пишіть, постараюся розповісти.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.