Версия для печати |
Журналы: Игорь_Vasinsky -> PHP во сне и на яву |
01 сентября 2011 |
01:07 MVC - очень удобно и практично. | ||
Решил я малость потрепаться про широко-популярный паттерн MVC (MODEL-VIEW-CONTROLLER), который практикуют и здесь, да и много кто ещё)) Кого озадачил - поясню: этот паттерн(он же шаблон проектирования) используется для создания сайтов, удобство его в том что используя его вы будете разделять логику(работу PHP) от вывода(шаблона). Хочу рассказать о своём способе его использования, а неорденарен он тем, что в нём я использую и лёгкий намёк на Smarty (это уж в WIKI гляньте...). Сначала о структуре такого сайта.
Так... тепер поясняю: Как вы обратили внимание - папки 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 - помогают мне ограничить доступ к одельным файлам и директориям не только от куль-хаккеров, но и от не нужной индексации. |
||
Комментарии :0 |
Нет комментариев к выбранной записи. |
mJournal v1.05 © 2003-2004 by UriSoft and IBResource.ru |