KodiCMS — CMS на Kohana framework

Всем привет, на Хабре уже вот как 6 лет и только сейчас решился написать свой первый пост, хотя до сих пор не уверен что это хорошая идея :)ПредисловиеУже более 6 лет я занимаюсь разработкой web приложений, начинал с верстки, javascript, php, python и т.д., в общем за все время я прошел все этапы создания сайта от дизайна в фотошопе и заканчивая созданием полноценного сайта.Решение о своем велосипеде В 2012 году мне надоело использовать сторонние CMS, у одних был скудный API, у других проблемы с гибкостью шаблонов, в общем каждая система отнимала кучу времени на разработку модулей и мне пришла мысль создать свой велосипед, хотя это еще больший геморрой, но в нем я смогу сделать все как мне нравится, яжпрограммист.Было решено писать не с нуля, а взять за основу пример реализации модулей из разных CMS, которые, как мне казалось, эффективно справляются со своей задачей, а также популярные готовые библиотеки, ну и вот список того, что вошло в систему:

WolfCMS (Модули: страницы, шаблоны, сниппеты, настройки, плагины, пользователи) FlexoCMS (JavaScript, загрузка страниц) OpenConstructor (Модуль Datasource, Гибридные данные (аналого инфоблоков в Bitrix), организация шаблонов, виджеты) Kohana framework в качестве ядра Twitter Bootstrap в качестве UI FontAwesome Ace в качестве редактора кода elFinder в качестве файлового менеджера Select2 для выпадающих списков FancyBox для popup окон jQuery UI Dropzone jQuery Nestable для сортировки дерева страниц Backbone (Используется в списке плагинов и для частей страниц) 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, правда многие были мной и созданы, работа над системой продолжается и сейчас.ca8dc543d0d640b5b3aa634b23275551.png

Основные возможности: Ядро на базе 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, в которых можно включить дополнительный код, который должен выполняться в той или иной среде.28efe277748d4070b77d4d1948afabf4.jpg

В общем это только начало, есть еще Почтовые шаблоны и события, выполнение задач через модуль kohana — Minion, но настройка через админ панель, гибридные данные, dashboard, конфиги, мета данные пользователя и т.д. И я очень хочу об этом всем рассказать и показать как все это работает.

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

В общем, тестируйте, используйте, присылайте свои идеи по развитию и доработке в любом виде, issue, pull-request, ЛС, skype, форум, комментарий

Спасибо за внимание.

© Habrahabr.ru