Путь от новичка до профи: разработка CMS на фреймворке Kohana 3.3

Лет пять назад подсел на разработку сайтов, причем чисто из интереса к вебу. Хотелось осознать, как их делать и делать лучше, чем другие. Начиналось всё это, как и для большинства разработчиков, с простого познания HTML, CSS и, конечно, популярных CMS, таких как Joomla, Wordpress и Data Life Engine. По мере роста приходилось углубляться в Javascript и, конечно, в мой любимый сейчас PHP. Но все шло не так быстро, как хотелось. Тренируясь на простом, хотелось понять сложные вещи. PHP поначалу плохо давался, но характер взял верх и все же через некоторое время написал что-то вроде похожее на мини-социальную сеть.

Ну а затем пошло-поехало: ООП, MVC и, наконец, пришло время покорять фреймворки. На тот момент самыми известными для меня были Zend, Kohana и CodeIgniter. Позже узнал о Symphony и YII. Выбор пал на Kohana, т.к. для новичка была проще в освоении и с нормальной документацией. Ну и недостатков в принципе для себя не видел в этом фреймворке.

В свободное от основной работы время я осваивал Kohana на простых примерах чисто для расширения кругозора и расширения знаний в области ООП. Но так сложились обстоятельства, что по мере работы с другими CMS приходилось развиваться и пробовать что-то самому, используя ту самую Kohana.

Цель была одна – стать хорошим программистом и заниматься тем, чем нравится.

Пропустим месяцы и годы роста. Наконец я решил выпустить свои наработки в свет в виде полноценной CMS на фреймворке Kohana в бесплатный доступ под названием Oxidos CMS версии 1.0.0.

Главные критерии:
  • Быстрая скорость работы;
  • Простота в расширении функционала;
  • Удобство использования и администрирования;
  • Изюминка CMS;
  • Универсальность.


Основным вдохновителем была CMS Opencart. Нравится её структура и удобство использования. Любителям Opencart возможно придет по вкусу моя CMS, т.к. имеется схожая структура и визуальная часть.

Итак, что мы имеем.

Основные возможности:


  • Добавление мультиязычного контента;
  • Добавление категорий неограниченной вложенности (используется алгоритм Nested Sets);
  • Добавление новостей, статей и статических страниц;
  • Используется ЧПУ (благодаря роутам Kohana);
  • Используется ORM и Query Builder. Позволяет подключить CMS не только к Mysql;
  • Разграничение прав доступа на каждый компонент админки;
  • Статистика в админке от Google Analytics;
  • Возможность менять шаблоны;
  • Возможность выбора модуля кэширования данных;
  • Возможность загружать изображения;
  • Возможность формирования файла Sitemap.xml;
  • Возможность добавления новых виджетов, а также возможность расширения функционала не в ущерб производительности;
  • И другие компоненты, с которыми можно ознакомится на сайте.


Что скрывается под капотом:
  • Kohana 3.3 – является ядром CMS. Это означает, что любой, знающий концепцию MVC или HMVC может без труда понять, как все работает. Особенно просто все будет «коханщикам»;
  • Twitter Bootstrap 3 – фреймворк используется для шаблона админки. Очень мне понравилось с ним работать, а особенно при использовании LESS. Исходники также доступны для дальнейшего изменения стилей. В дальнейшем планируется и видимую часть сайта переделать на него;
  • Summernote – текстовый редактор в админке, также использующий Bootstrap компоненты. Очень удобен в настройке и использовании;
  • Jstree 3– библиотека для представления дерева из каталогов и файлов. Используется в файловом менеджере;
  • Ну и конечно популярные библиотеки jQuery и jQuery UI.


Системные требования:
  • Веб сервер (желателен Apache);
  • PHP (начиная с 5.3.3);
  • Curl включен;
  • База данных MySQL (начиная с 4.1);
  • Расширение MySQLi;
  • Расширение IonCube (поскольку закодировано 2 файла: Core.php и Encrypt.php в целях безопасности).


В ходе обучения и разработки познается много нового и интересного и, тем самым, это способствует дальнейшему развитию и росту.

Цель данной статьи – познакомить вас с еще одним инструментом, который возможно будет интересен или целиком, или его отдельно взятыми частями.

Вывод
Oxidos CMS – бесплатная мультиязычная система управления контентом для создания сайтов-визиток, блогов и порталов. Будет интересна любителям Opencart и разработчикам сайтов, а также разработчикам собственных проектов.

Буду рад, если сообщество «хабра» хоть как-то отреагирует на CMS и даст советы или критику. Готов признать, что CMS не совершенна, как и большинство других первых версий продуктов, но стремится к этому нужно. Ошибки и советы помогут развиваться мне дальше как программисту.

Ссылки на проект:


Ссылки на используемые библиотеки и фреймворки:


P.S. Хочу выразить благодарность вдохновителям и учителям, которые мне помогли получить знания и разобраться в этом нелегком деле:
  1. Школе программирования (ШП)
  2. Илье Кантору (автору проекта javascript.ru)
  3. Daniel Kerr (разработчику opencart.com)
  4. Проекту Kohanaframework
Поделиться публикацией

Комментарии 29

    +8
    IonCube (поскольку закодировано 2 файла: Core.php и Encrypt.php в целях безопасности).

    О каких «целях безопасности» вы говорите?

    И разве допускает лицензия, GPLv3, которая указана у вас на GitHub-е, такие вещи?
      –6
      Ожидал подобного коммента. В данном случае речь идет о безопасности, снижающего присвоение этой cms себе как автору. Временно закодировал. Но скорее всего или сменю лицензию, или выложу оригинал. В любом случае спасибо за мнение.
        +5
        Я конечно дико извиняюсь, но автор хоть раз с гитом работал?
        Просто уж затеял глупость так сделай нормально ибо из истории можно легко вытащить оригинал (https://github.com/yarron/oxidos/commit/ef9dc4f3e30841ebef167f371efc047126078a08)

        А вообще если код выложен на github значит он дожен быть полностью открытым, под одной из лицензий на выбор, это прописано в правилах на github.
        Да и пользоваться никто не будет если нужно устанавливать некое расширение для php.
          –3
          Из за того, что только начал с ним работать и возникают такие ситуации. Спасибо.
      +3
      CMS Opencart. Нравится её структура и удобство использования

      Серьезно?? Удобство использования? Мне кажется мы живем в разных мирах. По мне, так опенкарт — один из самых ужасных движков
        –4
        Всегда есть лучше. Но по сравнению с cms, пстроенной не на mvc, opencart кажется удобным. Если можно, приведите примеры удобных cms.
          0
          Честно говоря особо не работал с движками. По интернет магазинам, мне кажется тот же eximuscommerce удобнее. Если брать движки в целом, wp, modx, joomla. Есть много интересных решений. Opencart слишком замудрен как для пользователя, так и для разработчика.
        +1
        > поскольку закодировано 2 файла: Core.php и Encrypt.php в целях безопасности
        Какой такой безопасности? Security through obscurity и безопасность — понятия противоречивые.

        Судя по всему, вы проект несколько лет писали?
        Но при этом не использовали контроль версий, и лишь недавно залили все одним комитом на github?

        Прочитайте, что такое MVC: вы работаете с MVC-фреймворком (Kohana), но выносите бизнес-логику и логику отображения в контроллер, и в них можно найти такие ужасы: github.com/yarron/oxidos/blob/master/application/classes/Controller/Index/Articles.php#L108
        Это очень плохо, так делать не стоит.
          +3
          По ссылке жесть: выбираем из базы $articles, потом циклом обходим все записи и в каждой итерации делаем три запроса к БД (вытаскиваем description, количество комментов, категорию)
            –3
            Спасибо за совет. Учтем на будущее.
            0
            Хром заблокировал загрузку архива т.к. считает, что он может быть вредоносным, а так хотелось посмотреть CMS именно на Kohana т.к. очень мало хороших проектов на данном фреймворке. Из того что знаю, Kohana используется в Ushahidi.

            Сам писал корпоративный сайт на Kohana и считаю, что в настоящее время данный фреймворк незаслуженно забыт. Вот теперь планирую переходить к изучению Yii2.
              +1
              Фреймворк Kohana не то что бы забыт, он просто перестал развиваться, и по сути умер.
              Это частично связано с тем что идеи заложенные в нём морально устарели, а что бы это изменить, нужно переписать его почти полностью.
              Хотя в своё время был отличным инструментом.
                0
                Согласен с вами. Тоже начал уже. Посмотреть можете и на demo.
                  +2
                  хотелось посмотреть CMS именно на Kohana т.к. очень мало хороших проектов на данном фреймворке

                  Прошу www.kodicms.ru, есть демо сайт
                  +3
                  www.kodicms.ru вот — единственная вменяемая цмс на кохана, а то что выше, нужно как минимум — привести в порядок.
                  Роли пользователей можно кодировать с помощью битовой маски, ну что же, желаем удачи в развитии проекта. Я не против развития Kohana в любом направлении.
                    +1
                    www.kodicms.ru вот — единственная вменяемая цмс на кохана

                    Спасибо :)
                    –2
                    Да, надо наверное форкнуть Kohana и своими силами толкать ее вперед. Последний фреймворк, в котором не умер дух «старой школы». Нет DI, нет composer, нет консольного тула.

                    Ведь для средне-маленьких проектов это на самом деле не особо и нужно, а весь проект зато — это просто файлы, которые можно просто git pull-ом забрать и все. И документация почти не нужна, весь код можно самому за пару дней разобрать.

                    Не хватало конечно хороших модулей к ней, увы.
                      +1
                      Я около четырёх лет сидел на Кохане, написал на ней несколько больших и хороших проектов. Недавно решил, что хватит на этом, и пошёл изучать Laravel. Сейчас пишу один проект на нём.

                      Ощущения от Ларавеля — будто использую новую версию Коханы) Суть особо не поменялась, лишь в роутинге немного непривычно.

                      Среди плюсов лары лично для меня: по какой-то причине ненавистный вам композер, очень простая и ясная документация, огромное количество качественно написанных сообществом компонентов, удобная консольная утилита, удобный встроенный менеджер миграций, поддержка мягкого удаления объектов из базы… И, в довесок ко всему этому, — приятное и отзывчивое сообщество.

                      В общем, советую и вам его попробовать) Очень хороший и простой фреймворк, который очень даже хорошо заменяет Кохану и, по сути, является её близким родственником.
                        0
                        У меня почти такая же ситуация, но очень смущает один момент в Laravel, вопрос, на который я пока не нашёл ответа. Мне очень нравится роутинг в Кохане, может вы сможете мне помочь, как человек, знающий оба фреймворка? Есть ли в Laravel какой-то более-менее нормальный способ делать роуты наподобие кохановских (или как в Yii), или же приходится прописывать каждый роут руками? Ведь в относительно больших проектах роутов могут быть сотни?

                        Пример роута из Kohana:

                        Route::set('route', '(<controller>(/<action>(/<id>)))')
                          ->defaults([
                            'controller' => 'Users'
                            'action' => 'index'
                          ]);
                        
                          0
                          Да, как я уже написал, система роутинга тут немного непривычная. Недавно на эту тему писали в группе в Вконтакте.
                          Там предложили такое решение: gist.github.com/vanchelo/2164db7e0e4ffbb4f317

                          Но я лично просто постарался привыкнуть к стилю Ларавеля. Возможно, их предложение даже более логично в чём-то, кто знает?
                          Вот пример файла роутинга в моем текущем проекте: gist.github.com/believer-ufa/408d8e1bb236227e29b1

                          При этом, я активно использую именованные роуты. Они мне нужны для того, чтобы легко генерировать красивые хлебные крошки с помощью компонента «davejamesmiller/laravel-breadcrumbs». Итого, у меня в любом случае в определённой степени вырос код роутинга и этих хлебных крошек, и всё это оказалось связанным. Но лично мне это сильно не мешает, ведь, по сути, ты только один раз это описываешь, а дальше твоё приложение просто работает, кушать не просит. Я сейчас выбрал такой вариант разработки. Что будет позже — посмотрим)
                            0
                            Спасибо!
                            0
                            1) вы всегда можете переопределить маршрутизацию на свою
                            2) вариант с <controller>/<action> не самый гибкий способ задания маршрутизации. Вариант который предлагает Symfony и в частности использованный в Laravel подразумевает что код ваших контроллеров вообще ничего не знает о маршрутизации. Это позволяет называть контроллеры как угодно, хранить их где угодно, делать контроллеры как сервисы и жить при этом счастливо. Боле того, не возникает проблем с генерацией маршрутов внутри приложения, так как мы там так же отвязываемся от кода. Это дает больше гибкости при разработе и поддержке проекта.
                            0
                            >ненавистный вам композер
                            Это неправда, он мне любимый даже
                            И DI — бесспорно хорошая штука, и консольные тулы нужны.
                            И в огромном проекте на симфони 2 я все это использую и жить без этого не могу. Но кесарю кесарево. Я и правда считаю, что для маленьких проектов толку в этом всем немного, и как раз для них Kohana был идеальным инструментом.
                            Laravel обязательно попробую, но чую, увижу в нем куда более крупный продукт для куда более широких нужд
                            +4
                            Хватит мучать труп. Это дух старой школы PHP которому давно уже пора на свалку.
                              +1
                              Видите, Kohana куда более воспитанна, чем вы.
                              Она не говорит, кто Вы, и тем более не говорит, куда Вам пора. Может и Вам стоит взять пример?
                                +1
                                Проверьте пульс. А коль пульс не прощупывается, то пациент мертв. А мертвые не могут разговаривать.

                                Просто для сравнения, те же показатели для Symfony2
                            +1
                            Цвета какие-то кислотные, особенно зеленый в админке, причем неактивные пункты меню практически не видны и кажутся недоступными.
                              0
                              Возможно вы правы. Но поправить цвет на более удобный можно через less, поменяв одну переменную.Не дизайнер, поэтому с креативом выходит не всегда удачно
                              0
                              Кнопка на сайте в слайдере «Скачать» и «Демо» ведут на несуществующий сайт oxidus.ru

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

                              Самое читаемое