Методы класса Smarty

Опубликовал: Wednesday, January 9, 2024 в категории AJAX, PHP | Пока нет комментариев

Для работы с шаблонами класс 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 — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *