Решил я малость потрепаться про широко-популярный паттерн MVC (MODEL-VIEW-CONTROLLER), который практикуют и здесь, да и много кто ещё))
Кого озадачил - поясню: этот паттерн(он же шаблон проектирования) используется для создания сайтов, удобство его в том что используя его вы будете разделять логику(работу PHP) от вывода(шаблона).
Хочу рассказать о своём способе его использования, а неорденарен он тем, что в нём я использую и лёгкий намёк на Smarty (это уж в WIKI гляньте...).
Сначала о структуре такого сайта.
Цитата |
Корень |_____Папка: admin | |_____файл: config.php | |_____файл: variables.php | |_____Папка: moduls | |_______Папка: administarte | | |___________модули панели администрирования | |_______файл: home.php | |_______ .............................. | |_______ файл: contacts.php |_____Папка: controllers | |____________Папка: administrate | | |___________контроллеры и подконтроллеры панели администрорования | |____________контроллеры и подконтроллеры модулей, например: c.home.php (первая "с." - говорит мне что это контроллер) |_____Папка: templates | |_______Папка: default | |______Папка: tpl (шаблоны tpl по названию модулей) | |______Папка: js (js- применяемые в этом шаблоне) | |______Папка: images (картинки применяемые в этом шаблоне) |_____Папка: images (тут хранится графика для админки) |_____Папка: js (js - для админки) |_____Папка: uploads (для загружаемых файлов) |_____Папка: libs (функции) |_____Папка: logs(логи - ошибки, статистика) |_____файл: index.php |_____файл: .htaccess |_____файл: robots.txt |_____файл: favicon.ico |
Так... тепер поясняю:
Как вы обратили внимание - папки images и js - есть и в корне и в templates/default, я придерживаюсь такой иерархии, так как в тех папках, что находяться в корне - я храню графику и скрипты, необходимые для адинки, а те что в папке templates - default - это всё файлы шаблона "default" - удобно это тем, что - оч просто создать новый шаблон (создать папку "new_templte" в папке templates) - и данные нового шаблона - хранить в его папке. А для админки не зачем каждый раз переписывать шаблон, он есть и его хватает.
Далее файл: variables.php - тут я определяю большую часть переменных, GET, POST, SESSION и т.д
файл: config.php - настройки подключения к БД, константы Debug (bool) - отладка/продакшн, mod_rewrite(ЧПУ/SEO)
в папке libs - здесь я храню все функции, одна функция - один файл по названию функции (f.getLinks.php)
Итак, как построен алгоритм работы такого сайта:
в корне лежит index.php - вот он один и тянет весь сайт (т.е. все ссылки проходят через него), а организовано это так:
- конструкция switch/case - обеспечивает подключение модулей
-сами модули инклудят (именно в таком порядке!)
- функции, необходимые для работы модуля
- контроллер модуля (или подконтроллер)
- шаблон шапки
- шаблон тела
-шаблон футера
Вывод этих 3-х шаблонов заносится в буфер, назначается переменная для данных в буфере и буфер очищается.
В шаблонах содержаться метки вида {*TITLE*}, {*TOP_MENU*}, {*BANNER*}
Перед выводом этой переменной (целого шаблона - статики) в модуле (непосредственно перед выводом шаблона) я функцией str_replace() - произвожу замену этих меток (в переменной с данными из буфера) - на данные полученные из БД (заголовка, меню и т.д.).
Функция str_replace - тем для меня удобна - что в качестве аргументов может принимать массивы - массив меток <> массив данных из БД, тем самым - мне хватает - подготовить массивы и один раз "прореплесить" - после этого уже вывод переменной с изменёнными данними из буфера (окончательный вывод статики всей страницы)
В дальнейшем, при сождании нового шаблона - просто вставляю такие метки в нужные мне места - и всё. уаля.....
(например - я в админки создал новое меню - всё в БД, в том числе там же хранится и метка этого меню {*MY_MENU*}, и если я куда нить поставлю эту метку - то он замениться на это созданное меню).
Админка моей CMS содержит массу настроек (и будет содержать ещё больше, так там например можно даже редактировать php и др. файлы, закрывая разделы для доступа - на время работы, и оснащено это дло редактором с подсветкой синтаксиса), чтоб меньше лазить в панель управления хостингом.
Написать модули для такой структуры - раз плюнуть (всё по полочкам, всё по нотам), добавили модуль - добавили подраздел в админку - для управления.
Вот в принципе и всё. Так же хочу добавит, что можно в контроллере - тоже устроить switch-case подконтролерам - тогда точно всё по полочкам!
Удачь!
P.S файлы .htaccess и robots.txt - помогают мне ограничить доступ к одельным файлам и директориям не только от куль-хаккеров, но и от не нужной индексации.