...

пятница, 17 октября 2014 г.

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)

  • Создание собственных разделов (Новости, Статьи и т.д.)


К сожалению узким местом системы является документация, она есть, но ее очень мало (http://ift.tt/1vBlSn2) и создание оной трудоемкий процесс, который мне уж не потянуть, а возможностей у системы, о которых стоит знать, очень много. :(


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




Разрабатывая 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 канал

Репозиторий проекта: http://ift.tt/1rgB3KQ, последние обновления в ветке dev, также сущестует ветка unittest в которой появляются первые тесты, но опять таки не хватает на все времени. Присоединяйтесь к разработке ;)


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


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий