Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #73, ДЕКАБРЬ 2006 г.

горячая выпечка CMS

БОРИС ВОЛЬФСОН

Спецвыпуск: Хакер, номер #073, стр. 073-068-2


<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

</IfModule>

Этот код указывает веб-серверу, что необходимо использовать движок для перезаписи адресов, и с помощью регулярного выражения задает правило преобразования.

[статические страницы]

Теперь все запросы будут переадресовываться на наш файл index.php. Хотелось бы его создать и реализовать логику, но сначала стоит немного подумать. Где у нас будет храниться содержимое страниц? Есть два варианта: в файле или в базе данных. Старые решения хранили инфу в текстовых файлах, ведь базы данных были доступны не на всех хостингах. Сейчас ситуация в корне поменялась: на любом хостинге имеется доступ к базе данных, так что грех ее не использовать. Для хранения содержимого страниц заведем таблицу pages. У нее будет три поля: page_id будет играть роль ключа, title хранить название странички, а body ее содержимое. Для создания таблицы можно использовать следующий простой скрипт на языке SQL.

CREATE TABLE `pages` (

`page_id` tinyint(4) NOT NULL auto_increment,

`title` longtext,

`body` longtext NOT NULL,

PRIMARY KEY (`page_id`)

);

[выбираем кодировку]

В системах управления сайтами сейчас просматривается тенденция использования универсальной кодировки Unicode. Причем на нее переходят и системы, изначально ее не использовавшие. Я предлагаю использовать Unicode сразу, чтобы в дальнейшем избежать проблем. Дабы браузер понял, в какой кодировке мы работаем, надо прописать следующую строчку перед выводом HTML:

header('Content-Type: text/html; charset=utf-8');

Она будет передана в заголовке, и браузер поймет, какую кодировку надо использовать.

[строка запроса]

Чтобы разобрать строку запроса, которая передается в наш скрипт, я сделал специальный класс. Пользоваться им довольно удобно, так как при инициализации он разбирает строку и дает к ней очень удобный интерфейс доступа через массив $splited_query. В этом массиве содержится разбитая строка запроса и переменнаю $action, которая содержит первый элемент строки запроса – обычно это некое действие, например, «показать страницу».

class Query

{

public $action = '';

public $page_id = '';

public $query = '';

public $splited_query = null;

function __construct()

{

$this->query = $_GET['q'];

$this->splited_query = split('/', $_GET['q']);

$this->action = $this->splited_query[0];

if ($this->action == "page")

$this->page_id = $this->splited_query[1];

}

}

[обработка действий]

Для начала поясню, что я понимаю под «действием». На самом деле все очень просто. Действие это значение $query->action, то есть первый параметр строки запроса. Если строка запроса представляет собой адрес www.example.com/page/4, то действием здесь будет являться “page”, что можно перевести как «покажи страницу с номером».

Назад на стр. 073-068-1  Содержание  Вперед на стр. 073-068-3