Когда я писал самую первую версию своего движка, то почему-то особо не задумывался какую выбрать структуру. Так сказать, что первое в голову пришло – то и написал. Попытаюсь объяснить основной принцип работы.
Движок работает с модулем Apache mod_rewrite, что позволяет сделать «дружественные» URL.Файл .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} ![^/]+\.[^./]+$
RewriteRule (.+)/? index.php?$1
И файл index.php:
require_once('./bin/core.php'); //основной файл
$engine = new Processor();
$engine->start($_SERVER['QUERY_STRING']);
В последней строчке передаём в метод start запрошенный адрес. Например если мы обращаемся к, то $_SERVER['QUERY_STRING'] будет /module/param.
Что же делает метод start? Для начала расчленим полученный $_SERVER['QUERY_STRING']:
$mm = explode('/', $request);
где $request – свойство метода start(), а $mm – массив, полученный после расчленения.
$mm[0] будет не что иное как запрошенный модуль.
Думаю самое время позаботиться о безопасности и сделать всему $_POST и массиву $mm обреза…т.е. фильтрацию простив SQL инъекции и XSS. Если в дальнейшем будет использоваться кукис, то и его отфильтровать.
Тут надо остановиться и не писать хрень типа include(“/modules/”.$mm[0].”/index.php”). Для начала надо сделать обязательную проверку на существование запрошенного модуля.
Далее подключаем основной шаблон, объявляем класс с модулем.
Впереди, наверное самое сложное: необходимо определить какой метод запускать при определённом запрошенном адресе. Общий вид «определителя» я взял из CakePHP. Повторюсь: общий вид, а не код. Вот как примерно это выглядело:
$this->rewrite(“/news/top”, $function, $template, $currentUrl);
Первое свойство – шаблон предполагаемого URL, $function – метод, который необходимо запустить если предполагаемый URL равен действительному, $template – шаблон, $currentUrl – массив $mm (читайте выше). $this->rewrite выполняет сравнение предполагаемого и действительного URL и если всё ОК, то запускает метод $function. Пример вида шаблона: если мы ввели адрес “/news/view/4”, то шаблон предполагаемого URL будет “/news/view/*”.
Это один из возможных вариантов структуры CMS. Сейчас я создаю движок почти по такой же структуре, но добавил несколько полезных вещей: многоязычность, определение параметров модуля в БД (если мы ввели http://site/novosti_mira/ то будет запущен модуль news, т.е. другими словами: можно задать любой URL для любого модуля), полностью новый Rewrite.
понедельник, 6 октября 2008 г.
Структура CMS
воскресенье, 5 октября 2008 г.
Начало
Около 2-ух месяцев назад срочно понадобилось написать CMS и повесить на неё свой сайт. Основными задачами тогда были: дружественные URL, простота создания шаблонов, простота написания модулей и лёгкость страниц. Удивительно, но с моей ленью удалось всё это дело написать кажется за 5(!!) дней.
Что использовалось при создании? Времени было маловато, поэтому никакой речи о XML, AJAX и прочему не могло быть. Всё просто и не замысловато: PHP 5, MySQL, HTML.
Ах, да! Забыл. Спросите "зачем создавать велосипед"?? Наверное что бы было удобней кататься :-) к тому же если ты фрилансер. Велосипед действительно получился удобным и все задачи, которые были поставлены - реализованы. Однако что-то в ней было не то.... Этим "не тем" является отсталось от жизни во времена, когда WEB индустрия только и говорит о достоинствах и преимуществах WEB 2.0. Компания, в которой я когда то работал заявила на своём сайте, что они перешли уже на WEB 2.1 (во время работы не чувствовалось - обычный CakePHP был).
Ну а в ближайшее время я расскажу о том, как я писал первую версию CMF. Для новичков и не только, уставших от быдло статей на эту тематику, уверен - будет интересно.