KodiCMS - CMS на Kohana framework

Всім привіт, на Хабре ось вже 6 років і тільки зараз зважився написати свій перший пост, хоча досі не впевнений що це хороша ідея :)

Передмова
Вже більше 6 років я займаюся розробкою web-додатків, починав верстки, javascript, php, python і т.д., загалом за весь час я пройшов всі етапи створення сайту від дизайну в фотошопі і закінчуючи створенням повноцінного сайту.



Рішення про своєму велосипеді
У 2012 році мені набридло використовувати сторонні CMS, в одних був убогий API, в інших проблеми з гнучкістю шаблонів, загалом кожна система забирала багато часу на розробку модулів і мені прийшла думка створити свій велосипед, хоча це ще більший геморой, але в ньому я зможу зробити все, як мені подобається, яжпрограммист.

Було вирішено писати не з нуля, а взяти за основу приклад реалізації модулів з різних CMS, які, як мені здавалося, ефективно справляються зі своїм завданням, а також популярні готові бібліотеки, ну і ось список того, що увійшло в систему:
  1. WolfCMS (Модулі: сторінки, шаблони, фрагменти, налаштування, плагіни, користувачі)
  2. FlexoCMS (JavaScript, завантаження сторінок)
  3. OpenConstructor (Модуль Datasource, Гібридні дані (аналого інфоблоків в Bitrix), організація шаблонів, віджети)
  4. Kohana framework в якості ядра
  5. Twitter Bootstrap в якості UI
  6. FontAwesome
  7. Ace в якості редактора коду
  8. elFinder в якості файлового менеджера
  9. Select2 для випадаючих списків
  10. FancyBox для вікон popup
  11. jQuery UI
  12. Dropzone
  13. jQuery Nestable для сортування дерева сторінок
  14. Backbone (Використовується у списку плагінів і для частин сторінок)
  15. RedactorJS (безкоштовна версія) в якості текстового редактора


Ну і невеликий список труднощів, з якими довелося зіткнутися за 2 роки розробки системи поодинці:
  • Оновлення фреймворка kohana до останніх версій та відлов пов'язаних з цим помилок. У підсумку довелося відмовитися від PSR-0, в увазі складності виправлення назви всіх класів і їх назви файлів. Пов не дає спокою мені й донині.
  • У 2014 році вийшла 3-я версія Twitter Bootstrap, я довго тягнув до останнього, але все-таки зібрався з силами і витратив тиждень на оновлення HTML коду всіх шаблонів сайту на свіжу версію, це ж стосується і всіх іконок Font-Awesome, в якому поміняли синтаксис. Це все довго і нудно.
  • Верстка шаблонів — саме не улюблене мною заняття і у зв'язку з цим іноді гальмувався розвиток системи, тому часом доводилося змушувати себе верстати HTML сторінки інтерфейсу і писати для нього JavaScript.
  • Творча криза також відвідував мене раз в пів року і хотілося закинути проект
  • Створення сайту для CMS. В зв'язку з тим, що я займаюся розробкою системи один, зайвих грошей на розвиток OpenSource проекту немає і довелося змусити себе зробити самому на своїй системі для неї ж сайт, який пережив, наскільки я пам'ятаю, два дизайну на які було витрачено 20$ і купа часу на написання контенту і т.д., який вже застарів… Зовсім забув про переведення сайту на англійську мову :), який робив так само я, переклад жахливий і я намагаюся зайвий раз не думати про те, наскільки він поганий, але це краще ніж нічого.
  • Створення демо-сайту. Перша версія демо-сайту була супер простий, він показував лише малу частину всіх можливостей, і в зв'язку з браком часу на його перероблення, прожив дуже довго. В цьому році була випущена нова версія демо-сайту, для неї так само був куплений шаблон за 5$ і реалізована велика частина можливостей системи.
  • Система оновлення. До сьогоднішнього дня не вирішена проблема з оновленням системи і структури БД. На даний момент це частково вирішено таким чином, через Github API відбувається отримання дерева файлів системи і порівняння розміру кожного файлу, а також порівняння локальної версії CMS та номера версії зазначеного на github, що допомагає користувачеві дізнатися про вихід нової версії, модуль оновлення БД також виробляє моніторинг зміни структури і в разі розбіжності допомагає виправити.
  • Було записано кілька відео без звуку, які б допомогли новим користувачам розібратися в системі.


Про систему
А тепер хочу представити вам свою OpenSource систему — KodiCMS, якій 15 серпня вже виповнилося 2, за цей час було зроблено 2175 комітів, закрито 250 issue, правда багато були мною і створені, робота над системою продовжується і зараз.



Основні можливості:
  • Ядро на базі Kohana framework
  • Backend UI на базі Twitter Bootstrap 3.2.0 і теми PixelAdmin
  • Dashboard з можливістю створення віджетів
  • Розширення за допомогою плагінів
  • Модульність
  • Використання Observer для розширення базового функціоналу
  • Обробка помилкових URL. (Якщо відвідувач допустив помилку URL, швидше за все він не одержить у відповідь: Сторінка не знайдена)
  • Віджети
  • Файловий менеджер elFinder
  • Візуальний редактор Ace
  • Розмежування прав користувачів (ACL)
  • Інтеграція з соц. мережами
  • Поштові шаблони і події для почовых повідомлень
  • Запуск завдань за розкладом
  • Інсталятор
  • REST API
  • Кешування (file, sqlite, apc, memcache, mongodb)
  • Можливість вибору місця зберігання сесії (native, cookie, database)
  • Створення власних розділів (Новини, Статті тощо)


На жаль вузьким місцем системи є документація, вона є, але її дуже мало (https://github.com/butschster/kodicms/wiki) і створення оной трудомісткий процес, який мені вже не потягнути, а можливостей у системи, про які варто знати, дуже багато. :(

Структура системи

Розробляючи CMS я намагався якомога менше змінювати код ядра kohana, вірніше навіть не так, папка system не зворушена повністю, деякі класи були розширені через модулі та доопрацьовані, але по суті це Kohana версії 3.3.2.
Система розбита на модулі і плагіни, початкова задумка була реалізувати зв'язок модулів між собою через Observer's, на практиці 70% модулів і плагінів саме через них і працюють, що дозволяє безболісно відключити частину модулів, сам то я це правда не пробував зробити, але сподіваюся, що це так :)

API

У системі є повноцінний API, який підтримує GET, POST, PUT, DELET запити через ajax і безпосередньо, має свою структуру URl, доступ до нього дозволений через backend, або через frontend з унікальним ключем. API також реалізується через контролери і дій. Трохи про нього можна дізнатися тут.

Frontend працює через рауса, який викликається самим останнім, в момент його виклику до БД відбувається пошук сторінок з url і виведення поточної сторінки, всі запити кешируются по ключу і по тегу.

Кешування

CMS використовує модуль kohana — Cache для кешування даних. Всі типи кеша підтримують теги кешування. В системі кешується більшість запитів:
  • Завантаження сторінки сайту
  • Конфіги
  • Віджети
  • Сніппети
  • Мета інформація користувача
  • Структура таблиці в ОРЗ


Плагіни

Система розширюється за допомогою плагінів, але плагін для системи — це той же модуль, тільки він розташований в папці plugins і підключається тільки після активації через адмін-панель, але це повноцінний модуль kohana, за винятком того, що він крім файлу init.php має ще frontend.php і backend.php, в яких можна включити додатковий код, який повинен виконуватися в тій чи іншій середовищі.



Загалом це тільки початок, є ще Поштові шаблони і події, виконання завдань через модуль kohana — Minion, але настройка через адмін-панель, гібридні дані, dashboard, конфіги, мета дані користувача і т.д. І я дуже хочу про це всім розповісти і показати, як все це працює.

Для ознайомлення з системою існує демо-сайт: demo.kodicms.ru/, прохання сайт не ламати, т.к. інші не зможуть подивитися його.
Youtube канал
Репозиторій проекту: github.com/butschster/kodicms, останні оновлення в гілці dev, також існує гілка unittest в якій з'являються перші тести, але знову таки не вистачає на все часу. Приєднуйтесь до розробки ;)

Загалом, тестуйте, використовуйте, надсилайте свої ідеї щодо розвитку та доопрацюванні в будь-якому вигляді, issue, pull-request, ЛЗ, skype, форумкоментар

Дякую за увагу.

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

0 коментарів

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