Beginner WEB-developer Blog of WEB-design. Most development in Kohana. Writing the components and modules for Joomla!

25Янв/115

Своя CMS – Начало

CMS на Kohana

CMS на Kohana

Наверное каждый WEB-разработчик, достигая определенного уровня знаний (или думая, что он их достиг) пишет свою CMS.

Для кого-то это просто админка с небольшим количеством функционала, для кого-то глобальный проект с модулями, шаблонизацией и т.д.

Конечно же я не исключение. Первое подобие CMS я стал писать, когда устроился работать в небольшую WEB-студию.

Дело в том, что большинство уже написанных популярных CMS (Joomla, WordPress, Drupal, MaxSite и т.д.) либо заточены под определенный тип сайта, либо настолько широки, что делать на них небольшие сайты-визитки с индивидуальным функционалом, требуемым заказчиком не эффективно.

Тут и встает вопрос писать каждый раз с нуля сайт или разработать небольшую систему, в которую легко будет добавить в любой момент нужные фишки?

Для себя я решил писать CMS.

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

Около полугода назад я познакомился с фреймворком Kohana. Пришлось в течение недели познакомиться с основами и сделать небольшой сайтик (задание перед приемом на работу). Писал на второй версии. Очень быстрый в освоении, простой, удобный и главное предоставляющий достаточные средства для создания своих проектов.

Третья версия показалась сначала более сложной. Хотя буквально через месяца два работы на второй версии стал осваивать третью и пошло очень легко.

Третья версия более требовательна к разработчику (то ли просто еще не доработана и из коробки нет некоторых вещей. то ли разработчики специально не стали очень простые вещи реализовывать).

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

Если быть точнее, то я не стал следовать рекомендациям разработчиков Kohana и создавать для каждой функции отдельный контроллер (т.е. для гостевой книги один, для форума другой, для фотогалереи еще один).

Я решил, что весь функционал будет реализован в модулях.

Опишу принцип работы:

1. При обращении пользователя к сайту сначала передается управление одному из двух контроллеров. Первый - это frontend, который отвечает за пользовательскую сторону и соответственно backend. Контролерам передаются параметры ACTION и MODULES, за что они отвечаю я думаю понятно.

2. Далее в контроллере определяется существует ли запрашиваемый модуль и вызывается из него определенный статический метод, который возвращает либо HTML ответ, либо JSON данный (если AJAX).

3. Соответственно в статическом методе модуля определяется по переменной ACTION какое действие надо выполнить.

4. Естественно для каждой таблицы создаются свои модели. (отмечу, что от повсеместного использования ORM отказался. Использовал Kohana ORM, Jelly и пришел к выводу, что их использование не всегда эффективно).

5. Каждые модуль имеет право изменять изначальный шаблон сайта. Использую это когда надо в отдельном модуле подгрузить нужный CSS или JS. Или поменять вообще весь шаблон на совершенно другой.

Вот поверхностно принцип.

Какие плюсы?

1. Все общие настройки задаются либо в базе либо в конфигурационном файле Kohana. Каждый модуль может добавить свое ГИБКОСТЬ.

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

3. РАСШИРЯЕМОСТЬ. Достаточно скопировать модуль в нужную директорию и прописать в bootstrap.php. Реализацию установки модулей пока не продумал, но идеи есть и я думаю ничего сложно не будет.

4. БЕЗОПАСНОСТЬ. К сожалению не очень подкован в вопросах безопасности, но решил, что предварительная обработка входящих данных на первом этапе будет очень полезна. Кроме того фильтровать переменные можно на любом другом этапе.

Какие минусы?

1. ШАБЛОНИЗАЦИЯ. Пока не выстроилась схема использования шаблонов. Совершенно не продумал как будут меняться шаблоны. Где и в каком виде будут храниться файлы шаблонов. Все JS файлы хранятся в одной папке. Все CSS тоже. Виды хранятся в папке модулей. к которому они относятся. Общий вид в папке приложения.

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

Комментарии (5) Пинги (1)
  1. Да, полностью согласен с вами, я молодой специалист по веб программированию., но мне предстоит еще много чего учить, Вы можете как нить помощь?? Вот как учить фреймворк кохана 3? Точнее с чего начать?? Вот это главный вопрос начинающего программиста

    • Я начинал с конкретной задачи — нужно было написать модуль статей. Познакомился сначала со 2 версией (По началу 3 показалась сложной и я отказался от нее). Соответственно скачал фреймворк, сел начал пробовать различные функции.
      Конечно использовал туториалы написанные разработчиками. Была цель 0 устроится на работу, может это помогло.
      Потом уже на работе приходилось решать задачи по созданию различный сайтов. Там уже хочешь не хочешь. а разбираться приходилось.
      Написал небольшую Админку (CMS трудно ее назвать).
      В процессе понял, что она ни на что не годится и решил написать с нуля на Kohana 3 CMS. Ну и потихоньку помаленьку писал. Сейчас делаю на ней сайты и пока меня все устраивает и есть куда развивать.
      Главное в изучении любого предмета или языка или фреймворка это поставить конкретную задачу, так чтобы она приносила либо удовольствие либо деньги))

  2. А каждый раз в ручную переписывать bootstrap.php? А если придет мысль продать отдельный модуль, как будет пользователь делать это в один клик?
    Думается надо делать в один клик!


Leave a comment