горячая выпечка 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> Листинг файла каскадных таблиц стилей я давать не буду, так как он тривиален. Теперь попробуем использовать наш шаблонизатор: |