Версия для печати
Журналы: Игорь_Vasinsky -> PHP во сне и на яву
01 сентября 2011
 01:07   MVC - очень удобно и практично.
Решил я малость потрепаться про широко-популярный паттерн 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 - помогают мне ограничить доступ к одельным файлам и директориям не только от куль-хаккеров, но и от не нужной индексации.

Комментарии :0

Нет комментариев к выбранной записи.

mJournal v1.05   © 2003-2004 by UriSoft and IBResource.ru