Методы класса Smarty
Для работы с шаблонами класс Smarty определяет набор методов. Рассмотрим несколько основных методов, которые нам пригодятся для примера совместного использования xajax и Smarty.
Метод assign
Синтаксис:
void assign (смешанное значение);
void assign (имя переменной, смешанное значение);
Метод служит для присваивания значения переменным шаблона (листинг 2.35).
Листинг 2.35
<?php
// передаем значение для
// переменной Name
$smarty->assign("Name","Иван");
// таким образом, переменная Name
// получит соответствующее значение Иван
?>
Метод display
Синтаксис:
void display(путь к файлу шаблона);
Метод отображает шаблон.
Пример
<?php
$smarty->display("template1.tpl");
?>
Метод fetch
Синтаксис:
string fetch(шаблон);
Этот метод возвращает обработанный шаблон в строковую переменную вместо того, чтобы выводить его на экран.
Пример
<?php
$x=$smarty->fetch("template1.tpl");
?>
Использование xajax и Smarty
А сейчас приведем пример использования xajax в шаблонном движке Smarty.
Рассмотрим два варианта применения шаблонов Smarty:
формирование главной страницы;
динамическую подгрузку результатов запросов к серверу.
Задействуем базу данных КЛАДР, знакомую нам по примеру из разд. 2.3.2. При выборе региона будем отображать 10 первых районов. Данные будем выводить в блок результатов, используя разные файлы шаблонов (файл шаблона выбирается здесь же в форме). Файлы примера расположены на прилагаемом компакт-диске в папке book_primers/2-8. Вид страницы при открытии файла index.php (листинг 2.36) приведен на рис. 2.32. Для вывода xajax-функций в заголовок шаблона подставляется код:
{$xajax_javascript}
Следующий код создает эту переменную в файле index.php:
$smarty->assign("xajax_javascript", $xajax->getJavascript("."));
Страница выводится через шаблон my_templates/index.tpl.html (листинг 2.37).
Рис. 2.32. Главная страница примера 2-8
Листинг 2.36
<?php
// подключение библиотеки Smarty
require_once("Smarty/libs/Smarty.class.php");
// создание нового экземпляра класса
$smarty = new Smarty();
// путь к папке шаблонов
$smarty->template_dir = ‘my_templates’;
$smarty->compile_dir = ‘my_templates_c’;
// подключение библиотеки xajax require_once ("xajax_core/xajax.inc.php");
// включение файлов
require_once ("result_select.php");
$xajax = new xajax();
// регистрация функций
$xajax->register(XAJAX_FUNCTION,"Result_Select");
// запуск процесса
$xajax->processRequest();
// подключение к базе данных
require_once("mybaza.php");
// создание переменной — массива результатов
$query1="SELECT id,name,socr FROM ".TABLE1." WHERE id_rayon=0 && id_town=0 && id_punkt=0 ORDER BY id ASC";
$rez1=mysql_query($query1);
$i=0; while($row1=mysql_fetch_assoc($rez1))
{
$i++;
$info[$i][id]=$row1[id];
$info[$i][name]=$row1[name];
$info[$i][socr]=$row1[socr];
}
// создание переменной для xajax-функций
$smarty->assign("xajax_javascript", $xajax->getJavascript("."));
// создание переменной для результата
$smarty->assign("info", $info);
// вывод шаблона
$smarty->display("index.tpl.html");
?>
Листинг 2.37
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title> Пример 8 (глава 2)к книге </title>
{$xajax_javascript}
</head>
<body>
<!-шапка ->
<div id=header1><b>Примеры к книге (глава 2 пример 8)<br>
Иcпользование Smarty при динамической подгрузке контента</b></div>
<br>
<!-Форма ->
<form id=’FormSelectRegion’ method=’post’ action=’javascript:void(null);’ onsubmit=’
xajax.$("ButtonFormSelectRegion").disabled=true; xajax.$("ButtonFormSelectRegion").value="Подождите…"; xajax_Result_Select(xajax.getFormValues("FormSelectRegion"));’ enctype="multipart/form-data";>
<input type=’hidden’ id=’number’ name=’number’ value=’0′><br>
<input type=’hidden’ id=’vibor’ name=’vibor’ value=’0′><br>
<b> Выбор шаблона вывода </b><br>
<!—выбор шаблона->
<div>
<select id=template name=template>
<option value=1>шаблон 1
<option value=2 selected>шаблон 2
<option value=3>шаблон 3
</select>
</div>
<b> Выбор региона </b><br>
<div id=’divselectregion1′>
<select name=selectregion1 id=’selectregion1′ >
{foreach from=$info item=item}
<option value={$item.id} >{$item.name} {$item.socr}
{/foreach}
</select></div>
<input type=’submit’ id=’ButtonFormSelectRegion’ value=’Выбрать’ >
</form>
<div id=’div_result’></div>
</body>
</html>
Выбираем нужный шаблон, затем нужный регион и нажимаем кнопку Выбрать. При этом вызывается xajax-функция Result_Select, которой передаются параметры формы. Функция собирает результаты в переменной-массиве $info. Далее передаем это значение для переменной Smarty:
$smarty->assign("info", $info);
И отправляем все это в один из шаблонов Smarty в зависимости от значения, выбранного в форме. Обратите внимание, что обработанный шаблон передается в переменную:
$content=$smarty->fetch(‘template2.html’);
И только потом контент передается в блок результата xajax-функцией:
$objResponse->assign("div_result","innerHTML",$content);
Функция Result_Select находится в файле result_select.php (листинг 2.38).
Листинг 2.38
<?php
function Result_Select($Id)
{
$objResponse = new xajaxResponse();
// подключение библиотеки Smarty
//require_once("Smarty/libs/Smarty.class.php");
// создание нового класса
$smarty = new Smarty();
// путь к директории шаблонов
$smarty->template_dir = ‘my_templates’;
$smarty->compile_dir = ‘my_templates_c’;
// подключение к базе данных
require_once("mybaza.php");
// получение результата
$query1="SELECT id,name,socr FROM ".TABLE1." WHERE id_punkt=0
&& id_region=’".substr($Id[selectregion1],1,2)."’
&& id_town=0 && id_rayon>0
ORDER BY id ASC LIMIT 0, 10";
$rez1=mysql_query($query1);
$i=0;
while($row1=mysql_fetch_assoc($rez1))
{$i++;
$info[$i][id]=$row1[id];
$info[$i][name]=$row1[name];
}
// создание переменной в Smarty
$smarty->assign("info", $info);
// выбор шаблона и получение результата
// выполнения шаблона в переменную
if($Id[template]==1)
$content=$smarty->fetch(‘template1.tpl.html’); elseif($Id[template]==2)
$content=$smarty->fetch(‘template2.html’); else
$content=$smarty->fetch(‘template3.html’);
// выдача результата через xajax
$objResponse->assign("div_result","innerHTML",$content);
$objResponse->assign("ButtonFormSelectRegion","value","Выбрать");
$objResponse->assign("ButtonFormSelectRegion","disabled",false); return $objResponse;
}
?>
Рис. 2.33. Вывод результата с использованием шаблона template1.tpl.html
Рис. 2.34. Вывод результата с использованием шаблона template2.html
Рис. 2.35. Вывод результата с использованием шаблона template3.html
На рис. 2.33—2.35 приведен вывод одного и того же результата для разн-
ых шаблонов. Файлы шаблонов (template1.tpl.html, template2.html, template3.html)
находятся в папке my_templates. Каталоги для шаблонов и компилированных шаблонов устанавливаются следующим образом:
$smarty->template_dir = ‘my_templates’;
$smarty->compile_dir = ‘my_templates_c’;
Содержимое файлов шаблонов приведено в листинге 2.39.
Листинг 2.39
// my_templates/template1.tpl.html
<table>
{foreach from=$info item=item}
<tr style="border-style:;border-width:4">
<td style="color:red;font-weight: bold;">{$item.id}</td>
<td> >>> {$item.name}</td>
</tr>
{/foreach}
</table>
// my_templates/template2.html
<table>
{foreach from=$info item=item}
<tr>
<td style="font-style:italic">{$item.id}</td>
<td style="font-style:italic;font-weight: bold;font-size: 20px "> ->
{$item.name}</td>
</tr>
{/foreach}
</table>
// my_templates/template3.html
<table>
{foreach from=$info item=item}
<tr>
<td style="background-color:yellow"><b> {$item.id}</b></td>
</tr>
<tr>
<td>{$item.name}</td>
</tr>
{/foreach}
</table>
Источник: Петин В. А., Сайт на AJAX под ключ. Готовое решение для интернет-магазина. — СПб.: БХВ-Петербург, 2011. — 432 с.: ил. + CD-ROM — (Профессиональное программирование)