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

автономная работа верстальщика и программиста

Дмитрий Фомин

Спецвыпуск: Хакер, номер #067, стр. 067-016-1


технический директор Дифокус (www.difocus.ru)

Сейчас большую популярность в веб программировании завоевали, так называемые, шаблонизаторы. Они позволяют добиться отделения прикладной логики и данных от логики представления. Это очень удобно в ситуациях, когда программист и верстальщик шаблона — различные люди.

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

[логика]

Шаблоны могут содержать в себе логику, но лишь при условии, что эта логика необходима для правильного представления данных. Такие задачи, как подключение других шаблонов, чередующаяся окраска строчек в таблице, приведение букв к верхнему регистру, циклический проход по массиву для его отображения и т.д. — все это является примером логики представления. Но Smarty не ограничивает в разделении логики приложения и представления. Smarty не видит разницы между этими вещами, так что помещать или не помещать логику приложения в шаблоны — решать тебе. Если же ты считаешь, что в шаблоне вообще не должно быть логики, ты можешь ограничиться использованием только текста и переменных.

[директивы]

Если коротко, Smarty может обработать файл-шаблон со специальными директивами.

ЛИСТИНГ

Здраствуйте, {$name}!

Это письмо отправлено в {$time}.

По умолчанию переменные в Smarty заключаются в фигурные скобки {}, а у самой переменной, как и принято в PHP, ставится знак доллара.

Сначала выполняется скрипт. В итоге получается некий набор переменных, которые хочется показать пользователю, в нашем случае это $name и $time. Для того, чтобы воспользоваться Smarty, нужно прежде всего иметь сам Smarty, который можно скачать отсюда — http://smarty.php.net.

[практика]

ЛИСТИНГ

интерфейс управления объектом Smarty

<?

define('SMARTY_DIR', 'smarty/' );

require_once(SMARTY_DIR . 'Smarty.class.php');

//работает наша логика

$name = ‘Дима’;

$time = date("F j, Y, g:i a");

// создание объекта Smarty, обычно просто создают класс для его использования

$smarty = new Smarty;

//конфигурационные файлы

$smarty->config_dir = './cfg';

//каталог с шаблонами

$smarty->template_dir = './tmpl';

//в этой директории будет храниться кеш

$smarty->compile_dir = './tmplс;

$smarty->compile_check = TRUE;

$smarty->debugging = FALSE;

$smarty->assign('name', $name);

$smarty->assign('time', $time);

$smarty->display('mail.tpl');

?>

ЛИСТИНГ

класс для создания нового объекта

<?php

class tmpl{

var $smarty;

var $template;

function tmpl(){

global $CFG;

$this->smarty = new Smarty;

$this->smarty->template_dir = $CFG['templates'];

$this->smarty->compile_dir = $CFG['templatesc'];

$this->smarty->config_dir = $CFG['cfgs'];

$this->smarty->cache_dir = $CFG['templates_cache'];

$this->smarty->compile_check = true;

$this->smarty->caching = false;

$this->smarty->debugging = __SMARTY_DEBUG;

}

function setTmpl($tmpl){

if($tmpl == '') return 1;

$this->template = $tmpl;

Содержание  Вперед на стр. 067-016-2