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

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

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

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


Я использовал самый простой вариант для обработки действий – условный оператор:

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

{

// обработка «показа страницы»

}

else if ($query->action == "list")

{

// обработка «показа списка страниц»

}

else

{

// действие по умолчанию

}

Рассмотрим преимущества данного варианта и его недостатки. Главным является простота и понятность, а недостатком – трудная расширяемость. В дальнейшем, чтобы сделать систему обработки действий более гибкой, стоит использовать модульный подход, дабы у модулей была возможность добавлять свои действия.

[получаем содержимое страницы]

Чтобы получить содержимое страницы (в ответ на действие /page/3, например), необходимо просто сделать SQL-запрос и обработать его результаты. Как правильно преподать результаты я покажу ниже, а сейчас остановимся на самом SQL-запросе. Он довольно прост, так как это обычный запрос на выборку, в котором ищутся страницы с нужным нам номером:

SELECT title, body

FROM pages

WHERE page_id = $page_id;

[шаблонизаторы]

Чтобы вывести готовую страницу в виде HTML (такой процесс обычно называют рендерингом), необходимо поставить содержимое в некий шаблон. То есть на всех страницах шаблон будет одинаковый, а название и текст страницы будут меняться. Такой подход позволяет экономить кучу времени и увеличивает скорость разработки. Программный модуль, который занимается рендерингом, называется шаблонизатор. Я предлагаю реализовать шаблонизатор в виде несложного класса:

class Template

{

protected $title = null;

protected $body = null;

function __construct($title, $body)

{

$this->title = $title;

$this->body = $body;

}

function print_page()

{

global $title;

$title = $this->title;

global $body;

$body = $this->body;

include_once('themes/standart/page.php');

}

}

Класс Template реализует простейший вариант шаблонизатора через глобальные переменные. Такой подход имеет небольшой недостаток: при неправильной настройке php достаточно легко сломать сайт. Чтобы затруднить жизнь взломщикам, можно отключить автоматическое создание глобальных переменных. Класс работает очень просто: при инициализации в конструкторе передаются необходимые данные, которые при выводе страницы делаются глобальными. В последней строчке печати страницы загружается файл с темой. Заметь, что его путь задан жестко. Его можно брать из базы данных и создать соответствующий интерфейс для выбора темы. А теперь приведу простейший файл с темой:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

<title><?php echo $title; ?></title>

<link type="text/css" rel="stylesheet" href="/themes/standart/style.css" />

</head>

<body>

<div id="wrapper">

<div id="body">

<h1><?php echo $title; ?></h1>

<?php echo $body; ?>

</div>

</div>

</body>

</html>

Листинг файла каскадных таблиц стилей я давать не буду, так как он тривиален. Теперь попробуем использовать наш шаблонизатор:

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