Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Уроки по созданию своей CMS http://forum.kohanaframework.su/viewtopic.php?f=38&t=657 |
Страница 1 из 6 |
Автор: | WinterSilence [ 28 май 2013, 14:01 ] |
Заголовок сообщения: | Уроки по созданию своей CMS |
Создание небольших проектов (блог или сайт-визитка) освещено довольно хорошо, поэтому решил начать цикл мини уроков по созданию больших проектов на базе Kohana. Исходного кода будет не много: я хочу в первую очередь донести идею, иначе, как мне кажется, это приведет к бездумному копипасту . Уроки будут снабжаться схематическими\упрощенными исходниками, для иллюстрации описанного, но использовать их "как есть" скорее всего не получится. Результатом данных уроков станет работоспособная основа для Вашей CMS. Основные моменты: - Максимально возможное использование функционала и архитектуры Kohana (за основу взята последняя на данный момент версии 3.3). - Упор на масштабируемость т.е. расчет на развитие\расширение системы: разграничение на приложения и модули. - Ориентированность на ООП (абстрагирование, инкапсуляция, наследование и полиморфизм), использование шаблонов проектирования, прежде всего MVC и HMVC, а также Facade, Factory, Builder, Singleton, Observer. - Безопасность: разграничение доступа, валидация\фильтрация данных, шифрование сессии и cookie, использование капчи, CSRF и меток(token). - Использование шаблонизатора(на примере Smarty 3.1 или Fenom 1.3), позволяющего отделить прикладную логику и данные от представления в духе концепции MVC. Если какие-то момент Вам не понятны, не расстраивайтесь и продолжайте читать, скорее всего ответы на них встретятся позднее! Если всё же вопросы остались, то старайтесь задавать их в ЛС\ICQ, а не писать в самой теме. FAQ по актуальным вопросам будет добавляться к тексту уроков. Уроки рассчитаны на людей, имеющих хотя бы небольшой опыт разработки проектов на основе Kohana 3.х. Это подразумевает, что Вы хорошо знакомы с OOП программированием и шаблонами проектирования. Проект доступен по адресу https://github.com/WinterSilence/kohana-cms/ Список полезных материалов: Конфигурирование Apache http://perishablepress.com/stupid-htaccess-tricks/ ООП в PHP http://www.php.net/manual/ru/language.oop5.php Шаблоны проектирования http://ru.wikipedia.org/wiki/%D0%A8%D0% ... 0%B8%D1%8F Kohana API http://kohanaframework.org/3.3/guide-api Статьи по работе с Kohana: http://kerkness.ca/kowiki/doku.php http://kohana3.ru/ http://habrahabr.ru/search/?q=kohana http://wadya.pp.ua/?s=Kohana http://cyberapp.ru/category/php/kohana/ http://brotkin.ru/tag/kohana-3-3/ |
Автор: | WinterSilence [ 28 май 2013, 14:02 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
Урок 1. Базовая архитектура CMS CMS будет состоять из следующих частей: - Пользовательская(frontend), доступная посетителям сайта. - Административная(backend), необходимая для управления контентом. - Консольная(cli), для использования консольных приложений(автозапуск через crontab). Наиболее логичным является размещение частей в соответствующих приложениях (application). Базовый функционал, на котором строятся приложения, будет размешен в модуле common. Независимые части кода, разместим в отдельных модулях: пагинатор(paginator), капча(captcha) и т.д. Файловая структура частей CMS аналогична приложению application, входящему в дистрибутив Kohana. В последующих статьях структура будет расширена и расписана более подробно, не забывайте добавлять новые каталоги и файлы! Структура каталогов: Код:
Такая архитектура обеспечивает независимость приложений, что хорошо как с точки зрения масштабирования - изменения в одной части не повлияют на другие, так и безопастности - код изолирован, но при этом обеспечен доступ из backend'а к frontend'у. Модуль common подключается во всех приложениях и содержит классы, отвечающие за ядро(основную логику работы) нашей системы, а также расширения(extends) системных классов и модулей. Таким образом мы избегаем излишнего повторения кода. Все классы, явно не относящиеся к CMS, группируются в модули - это позволяет при необходимости легко заменять их на более функциональные. .htaccess Основные моменты по настройке сервера: Прямой доступ к служебным папкам и файлам закрыт по соображениям безопастности. Сервер настраивается таким образом, чтобы доступ к приложениям был только через специальные "точки входа": cli.php, admin.php, index.php. Таким образом, при вводе в браузере `http://site.ru/admin/product/list/` в точку входа `http://site.ru/admin.php` передается путь `/product/list/`, это приводит к вызову метода action_list() контроллера Controller_Page_Product `/backend/classes/Controller/Page/Product`. Используются ссылки в ЧПУ формате http://ru.wikipedia.org/wiki/%D0%A7%D0%9F%D0%A3_%28%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%29 Код:
Здесь приведен только основной код .htaccess, полную версию можно найти в исходниках нашей CMS (ссылка в конце). Рекомендую взять за основу Вашего .htaccess вариант https://github.com/WinterSilence/YiiBoi ... /.htaccess Естественно, его придется скорректировать с учетом выше описанного и удалить лишний код, для ускорения загрузки. Грамотная настройка сервера позволит значительно ускорить работу приложений и избежать массы проблем как с безопасностью, так и с отображением контента. index.php\admin.php\cli.php Точки входа(гейты) в приложение: Параметры из второстепенных точек (admin.php\cli.php) передаются в основную (index.php), содержащую обобщенный код загрузки приложений. Основная точка является модифицированным вариантом index.php, входящего в дистрибутив Kohana. admin.php Пример точки входа(гейта) в приложение backend: Код:
index.php Основные изменения: Добавлено несколько констант и функций для минимизации и упрощения кода. Добавлены в начале т.к. используются повсеместно. В зависимости от параметров точки входа выбирается загружаемое приложение. Введены дополнительные константы для упрощения доступа к важным директориям. Начальные настройки даты\времени, языка и сервера для удобства вынесены в config.php. Загрузчик(bootstrap) разбит на две части: обобщенную(располагается в корне) и текущего приложения(находится в директории приложения). Код:
Такой подход позволяет минимизировать код, а также ускорить загрузку страниц т.е. уменьшить нагрузку на хост. На этом первая часть заканчивается, в следующей речь пойдет о создании набора базовых контроллеров и немного о модуле common. |
Автор: | manchi [ 03 авг 2013, 19:38 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
на этом первая часть заканчивается, как в прочем и весь курс. Де это и не мудрено далеко не всем хватает энтузиазма до конца, |
Автор: | WinterSilence [ 03 авг 2013, 23:05 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
manchi интереса к теме нет, т.ч. не вижу смысла её продолжать, появятся люди напишу еще пару обзоров. |
Автор: | Sergey [ 07 авг 2013, 02:32 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
WinterSilence ты не прав. Люди всегда есть. И те кто не привык надо не надо что-либо комментировать, и те кто не регистрируется, а читает как гость. Так что это ты зря. Продолжай |
Автор: | arhont [ 08 авг 2013, 18:29 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
Больше правда меня интересует техники программирования, чем написания CMS. Просто если бы я пользовался CMS, то оставался бы на Joomla и Modx. Здесь же нужно только сделать админку. Так что если хочешь, продолжай, я послушаю лекции на примере создания крупного проекта. |
Автор: | WinterSilence [ 09 авг 2013, 14:32 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
Sergey ок! спс за поддердку! arhont твой псевдо заумный бред меня достал честно говоря порядком, если не ясно значение аббревиатуры CMS, то просто закрой варежку. ок, готовлю продолжение) |
Автор: | rain2 [ 11 авг 2013, 14:45 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
WinterSilence, видел твои наработки на гитхабе, модуль корзины взял себе для дальнейшего использования), правда еще только заглянул, подробно не смотрел. И репо с описанной структурой вроде встречал |
Автор: | WinterSilence [ 13 авг 2013, 18:28 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
Урок 2. Базовые контроллеры Начнем имеено с контроллеров потому, что большинство проектов из тех, что я видел, имеют проблему именно с ними. Весь их функционал собран в лучшем случае в одном базовом контроллере, а в худшем вообще дублируется в каждом контроллере. Как результат проблемы при модернизации и необходимость писать много рутинного кода. Создадим для нашей CMS набор базовых контроллеров, размещенных в модуле common, содержащем общий для всех приложений функционал. Они будут наследоваться контроллерами приложений, это обеспечит общую "базу" для всех частей системы. Необходимо реализовать генерацию путей к файлам, связанных с контроллером (Виды, конфиги, переводы) для их авто загрузки. Путь к файлу(или ИД записи в БД) можно создавать на основе имени класса-контроллера - Controller_Widget_News `/widget/news` или по данных запроса(request) - `$request->directory().'/'.$request->controller().'/'.$request->action()`. Также стоит добавить вспомогательные параметры и методы-обёртки которые упростят процесс написания кода, например: Код:
Они аналогичны методу redirect класса Kohana_Controller и не идут в разрез с концепцией MVC т.к. непосредственно в них работа с данными не производится. Учесть все возможные нюансы слишком сложно, поэтому стоит принять ряд допущений, облегчающих работу, например: - Пути и структура CMS аналогична структуре данных дистрибутива и урока 1 (и последующих уроков) - Конфиги/Виды/переводы (пока что!) загружаются из файлов - Контроллеры могут иметь персональные Виды, конфиги и переводы(i18n) по адресу: `директория/контроллер` (`widget/news`, `page/news` , 'ajax/news') - Контроллеры страниц могут иметь дополнительные файлы Видов, конфигурации и перевода по адреcy: `директория/контроллер/экшен` (`page/news/list`, `page/news/add`) - Модели могут иметь персональные конфиги, переводы(i18n) и сообщения(message) по адресу: `model/имя_модели`. - Подключены модули Kohana: auth, cache, database, orm. А также ряд сторонних: assets, message, email и собственно сам common (ссылки на них будут позднее) - Основные конфиг группы контроллеров: site(общие настройки), meta_tags, contacts(email, телефон, icq и т.д.), assets(js,css), breadcrumbs(навигационная цепочка), paginate(постраничная навигация) - В последующих уроках список допущений может быть расширен или скорректирован Список контроллеров, их назначение и функционал: Controller_Basic extends Controller - Базовый Наследуется остальными, поэтому логично добавить вначале аутентификацию\авторизацию т.к. если пользователь не пройдет проверку, то дальнейшее выполнение не имеет смысла. Также стоит разместить здесь авто загрузку конфигурации контроллера. Для удобства добавить параметры и методы-обертки для работы с данными запроса, сессией, кешем, конфигурацией и т.д. Controller_Ajax extends Controller_Basic - AJAX запрос Логично вначале проверять тип запроса(is_ajax) и данных ответа т.к. в случае ошибки, то дальнейшее выполнение не имеет смысла. Нужно добавить HTTP заголовки(headers), чтобы не было проблем c результатом(отключить кеш, задать тип данных). Желательно добавить авто конвертацию результата в нужный формат(html\json\xml). Controller_Layout extends Controller_Basic - База для визуальных контроллеров Нужно реализовать кещирование контента, при наличии кеша можно пропустить выполнение action и возможно before\after. Виды(View) должны загружаться автоматически, кроме тех случаев, когда он задаются вручную. При внешнем вызове (если он разрешен) результат "оборачиваем" в Вид(View) `layout/skeleton`(каркас html документа). Т.к. на его основе строятся виджеты и страницы, использующие js\css, желательно подключить assets модуль для объединения и минимизации их контента. Controller_Widget extends Controller_Layout - Виджет Виджет — это небольшой информационный блок, размещенный в основном шаблоне страницы. Обычно он содержит данные или сервис другого сайта, например, новости, последние сообщения на форуме, случайный анекдот и т.д. Отличия от Controller_Layout минимальны: используется только один action метод - action_index или его алиас - action. Controller_Page extends Controller_Layout - Страница\Раздел Использует 2 Вида: один содержит непосредственно контент страницы, а второй - шаблон, в который оборачивается контент. В данном шаблоне размещаются виджеты и сниппеты. Т.к. большинство страниц (а иногда и все) используют один и тот же шаблон, то его имя задается только вручную. Для frontend Я обычно использую 3 шаблона: для главной, для ошибок и общий - для всех остальных. Сниппет — небольшой фрагмент html текста, пригодный для повторного использования. Они обычно используются для более лёгкой читаемости кода, который без их использования выглядит слишком перегруженными деталями, или для устранения повторения одного и того же общего участка кода. Желательно сделать кеширование конфигурации, чтобы сразу загружать из кеша объединенный вариант вместо нескольких конфиг файлов. https://github.com/WinterSilence/kohana ... roller/CMS |
Автор: | Sergey [ 13 авг 2013, 18:30 ] |
Заголовок сообщения: | Re: Уроки по созданию своей CMS |
Прочёл по диогонали, но так и не встретил зачем кстати лого делать виджетом? |
Страница 1 из 6 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |