Компания
26,25
рейтинг
17 октября 2014 в 01:29

Разработка → 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, форум, комментарий

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

Upd. Спасибо Хабрахабр за блог компании.
Автор: @ButscH
KodiCMS
рейтинг 26,25
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Похожие публикации

Комментарии (43)

  • 0
    Можно подробнее, почему пришлось отказаться от PSR-0? А вообще сейчас PSR-4 используется, он должен подойти. И какая версия Кохана используется?
    • 0
      Версию увидел, 3.3.2. И всё же, почему не прикрутить PSR-4 автозагрузчик рядом с кохановским?
      • +1
        Почему бы не использовать composer?
    • 0
      Проблема в том, что в версии Kohana 3.3 появились зачатки PSR-0, а именно
      All class file names and directory names must match the case of the class as per PSR-0., а в связи с тем, что уже был пройден длинный путь разработки на более старых версиях (начальная версия была 3.1 насколько я помню), то привести все названия файлов и классов было уже трудоемкой задачей, которая требовала бы тестирования со стороны пользователей, но аудитория пока что очень маленькая и соответственно самому выловить все баги будет очень тяжело, хотя начало было положено github.com/butschster/kodicms/tree/PSR-0_support благодаря помощи канадского программиста.
      • 0
        Так можно же добавить в стек несколько autoloader-ов, в т.ч. и кохановский lowercase, а за ним PSR4-compatible
  • 0
    А с чем связан вот этот грустный коммит?
    remove PHPUnit test files


    И да, было бы неплохо для разработчиков и контрибьютеров организовать Vagran-box/docker контейнер с настроенным окружением, что бы потыкать так сказать.
    • 0
      А с чем связан вот этот грустный коммит?
      remove PHPUnit test files

      Они были убраны из ветки master и dev и оставлены в ветке unittest, которую я создал специально для тестов
      • 0
        Зачем? Какой в этом сакральный смысл? Исключить из дистрибьютива тесты?
        • 0
          А смысл в них в основном дистрибутиве, если для тестов сделана отдельная ветка.
          • 0
            Смысл как раз в том, чтобы писать тесты для текущей ветки.
            • 0
              unittest мерджится с dev веткой постоянно, хотя если есть предложения по организации работы с тестами, готов выслушать, для меня показалось логичным включить их в отделльную ветку и в ней проводить написание тестов и т.д.
              • 0
                Не поймите меня не правильно, но по моему это дополнительные издержки, от которых легко можно отказаться. Или у вас были причины на такой шаг? Расскажите пожалуйста — будет интересно.
              • +1
                Мы храним все тесты в корне проекта — папка «test» содержит все тесты. Это в принципе удобно, хотя порой возникает желание положить все тесты определенного модуля в сам модуль. Руки пока не дошли до этого.
  • 0
    CMS понравилась, автор проделал нереальную работу.
  • 0
    RedactorJS (бесплатная версия) в качестве текстового редактора

    А это какая версия и где ее можно скачать? Вроде как платно, если с открытым кодом то еще и самая дорогая лицензия или вы купили лицензию?

    • +2
      Раньше был бесплатен. Сейчас за деньги.

      Расскажу про наш опыт — мы к сожалению ушли от него на CKEditor, потому что постоянно всплывали проблемы (для юзеров) на продакшине и нашим пользователям это не нравилось. Не знаю как сейчас там дела обстоят, но когда версия была бесплатная — мы сами фиксили баги и даже им оптравляли. Давно это было…
      • +1
        Поддерживаю вас, тоже имел практику внедрения Redactor устаревших версий(бесплатные) однако отказался от него в пользу Ckeditor — намного более удобно расширяемый редактор + наличие неимоверно большого каталога плагинов.
        • 0
          Особенно радует то, что CKEditor достаточно часто обновляется. Иногда в месяц по два раза обновления разворачиваем на продакшине.
          • 0
            В CMS — RedactorJS интегрирован в качестве плагина, также для системы был разработан плагин CKEditor, плюс системы в том, что редакторы не встроены в систему, за исключением редактора ACE.
            • 0
              Это похвально! Вы вообще проделали отличную работу — так держать!
  • 0
    А это какая версия и где ее можно скачать? Вроде как платно, если с открытым кодом то еще и самая дорогая лицензия или вы купили лицензию?

    RedactorJS до определенного момента был бесплатным, и лицензирование началось с 9-й версии, если я не ошибаюсь.

    https://github.com/html5cat/redactor-js вот, он конечно не такой крутой, как платные версии, мне пришлось его дорабатывать.
  • 0
    Я смотрю нереально всё продвинулось, по сравнению с используемой мной KodiCMS 2.0.0. Надо будет найти время и постараться мигрировать на новую версию)
  • +3
    Труд колосальный, достойно уважения!
    Жаль, что разработчики в свое время забили на Кохану, фреймворк умер, и утянет за собой Ваш продукт. Может есть смысл Вам форкнуть Кохану и развивать форк в тандеме с cms?
    • +2
      У человека с трудом хватает времени на развитие CMS, а Вы ему предлагаете еще и фреймворк тащить на себе.

      Другое дело, что надо посмотреть на уже существующие форки (насколько я помню, еще несколько CMS привели к таким ответвлениям) и возможно присоединиться к ним. Другой вариант — познакомиться с текущей командой разработчиков Kohana. Да, фреймворк еще не совсем умер, по крайней мере были шевеления в github.com/kohana/kohana/tree/3.4/develop.
    • +1
      Как человеку, работающему, в основном, с Kohana, позволю себе сказать, что слухи о смерти Kohana сильно преувеличены
      • +1
        Возможно вы еще проходите фазу отрицания.

        Если брать реальную картину. Последний коммит в версию 3.4.x-dev был сделан месяц назад. Вообще динамика коммитов за последние пол года крайне печальна… Я думаю что вам стоит тихонько так тайком подумывать о том что бы сменить фреймворк для будущих проектов.
        • 0
          Вы знаете, смотрел на Yii2 и Laravel5 в сравнении с Коханой. Да, они чуть-чуть современнее и некоторые моменты мне в них нравятся больше, но это не киллер фичи. Помоему должно пройти лет 5, чтобы Kohana 3.3 превратилась в мамонта как Codeigniter
          • 0
            Ну то что Kohana лучше CI или CakePHP я и не спорю (хотя найдутся люди которые не согласятся). Но вы смотрели скажем Symfony2? Их httpkernel и httpfoundation, систему маршрутизации и т.д. В сторону Laravel или Zend2 — тамошние контейнеры зависимостей скажем выглядит симпатичнее чем тот что в Symfony2 (мне уж больно нравится автоконфигурирование на основе тайпхинтинга и реализаций интерфейсов).

            Словом… понимаю что Kohana еще не сильно пахнет, переводить старые проекты с нее на что-то получше не призываю. Но вот делать новые проекты на ней считаю странным.
            • 0
              Смотрел и пишу еще раз, что не считаю это киллер фичами :)

              Но вот делать новые проекты на ней считаю странным.

              Новые проекты возможно нужно бы было на Yii2 или Laravel писать, но жизнь иногда несправедлива :)
        • 0
          Спорить нет смысла, т.к. действительно, динамика развития Kohana очень слабая. Я к чему клоню, что еще лет так на 3-5 его (ее?) точно хватит. А вечного ничего нет.
    • 0
      maxsite живет — хотя кодигнайт хоронят каждый год начиная с появления))
      • 0
        последний коммит 8 месяцев назад, 45 старгейзеров… Ну да, живее всех живых. И пользуются ей наверное прям так активно активно… и внутри у нее тоже все в лучшем духе проектов на CI.
  • 0
    Очень здорово! Kohana — мой первый фреймворк, очень жаль что он кончился. Заинтересовало вот что
    Все типы кеша поддерживают теги кеширования.

    Насколько я помню в 3 версии ни один тип кеша не поддерживал теги, вы сами допиливали? Особенно интересует memcache.
    • 0
      Ну собственно в Kohana есть интерфейс Cache_Tagging и из коробки есть поддержка тегов — для MemcacheTag, sqlite, я добавил только поддержу тегов для File (хотя я думаю вообще исключить этот тип кеширования), для APC и MongoDB
  • 0
    На первый взгляд CMS весьма достойная, особенно учитывая что вы писали ее в одиночку. Этот же факт сильно останавливает от ее использования, ведь в какой-то момент у вас могут смениться приоритеты. Вы думали над способами монетизации проекта? Например, по моим ощущением функционально ваша CMS ничем особо не уступает американскому ExpressionEngine от EllisLab, которая кстати написана на предке Коханы CodeIgniter'е. Так вот у них есть бесплатная версия и платная за $300 лецензия. В рашке за эти деньги вероятно удушатся, но если вам удасться вывести свои разработку на глобальный уровень, но можно вполне себе зарабатывать.
    • 0
      Этот же факт сильно останавливает от ее использования, ведь в какой-то момент у вас могут смениться приоритеты.

      Есть несколько причин разработки CMS, одна из них это заработок денег, т.е. я выполняю заказы по разработке сайтом и для этого использую свою CMS и трачу на разработку одного сайта менее 3-х дней, вторая причина, мне нравится программировать.
      Ну и надеюсь в будущем найдутся люди, которые присоединятся к разработке системы, что снизит вероятность того, что система будет заброшена.
  • 0
    Почему бы не сделать сортирование страниц сразу, без необходимости переключения в режим сортирования? Добавить слева к каждому пункту иконку для сортирования, мне кажеться так будет удобней
    • 0
      Во первых так исторически сложилось, ведь этот модуль делался по аналогии с FrogCMS и FlexoCMS, во вторых ветки в дереве страниц можно сворачивать (а в свернутом виде они не загружаются из бд), поэтому в любом случае для сортировки придется производить дополнительные манипуляции, ну и так меньше вероятности, что это не сделает кто-то случайно.
  • 0
    Автор молодец! Спасибо за труд и успехов в разработке!
  • 0
    Выглядит добротно!
  • 0
    С коханой два месяца, влюбился почти сразу.
    Посмотрел демку, выглядит очень вкусно.
    Желаю побольше чистого и производительного кода!
  • +1
    А я вот на Кохане пару крупных проектов запустил, а потом она умерла.
    И я перешел на Zend2 (до этого посмотрев другие современные решения).

    Я понимаю, что работы проделано много уже и выкидывать или переписывать свой код жалко, но какой смысл изучать или писать что-то на уже мертвом (отставшем) фреймворке?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка