Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка К ИС.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
316 Кб
Скачать
☆
    1. Использование шаблонизатора smarty

3.3.1 Шаблонизатор Smarty

Smarty — компилирующий обработчик шаблонов для PHP, один из инструментов, позволяющих отделить прикладную логику и данные от представления в духе концепции Model-view-controller.

Язык шаблонов Smarty расширяет HTML smarty-тегами, встраиваемыми в документ. Эти теги могут представлять собой PHP-переменные (возможно, снабжённые модификаторами, напр. {$variable|nl2br}), функции или базовые конструкции структурного программирования, такие как {if …} … {else} … {/if}.

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

Smarty — первая шаблонная библиотека, использующая механизм кэширования байт-кода.

Smarty читает файлы шаблонов и создаёт PHP-код на их основе. Код создаётся один раз и потом только выполняется, поэтому нет необходимости обрабатывать файл шаблона для каждого запроса и каждый шаблон может пользоваться всеми преимуществами расширений PHP для кэширования байт-кода, таких как eAccelerator или PHP Accelerator. Smarty стал, вероятно, первой шаблонной библиотекой, использовавшей такой механизм. Позднее появилось множество аналогов, использующих как smarty-подобный синтаксис шаблонов, так и другие подходы к синтаксису шаблонов.

Компиляция шаблонов позволяет достичь производительности, сравнимой с производительностью PHP-шаблонов, написанных вручную. Конструкции if/elseif/else/endif передаются обработчику PHP, так что синтаксис выражения {if …} может быть настолько простым или сложным, насколько это требуется. Возможно неограниченное вложение секций, условий и т.д.

3.3.2 Использование шаблонов smarty в проекте

Изначально проект строился по довольно сложной схеме, сочетая в одном файле html-код и логические функции, написанные с помощью php. Отсюда возникала большая путаница и трудности в отладке. Используя шаблонизатор smarty, появилась возможность значительно сократить объёмы работы и упростить код.

Для начала потребовалось скопировать папку дистрибутива smarty в проект «Телефонные переговоры» и создать следующие директории: templates, где хранятся созданные шаблоны и templates_c, куда шаблонизатор записывает скомпилированный шаблон.

В уже созданных страницах первым делом потребовалось подключить класс smarty к написанному скрипту и создать объект этого класса.

<?

require_once('smarty/Smarty.class.php');

$template = new Smarty();

?>

В папке templates хранятся шаблоны с html-кодом и расширением tpl, каждый из которых «выдран» из ранее разработанных скриптов.

Ниже представлен универсальный шаблон для работы с каждой из таблиц:

<table width = 100% border = 1>

<tr>

{foreach item=top_t from=$top_table}

<td width='{$top_t[1]}'>

<center><b>{$top_t[0]}</b></center>

</td>

{/foreach}

</tr>

{foreach item=line_mas_table from=$result name="m"}

{assign name="id" var="id" value=$line_mas_table->id}

<tr onmouseover="this.style.background = '#e0effb';"

nmouseout="this.style.background = '#ffffff';">

<td> {$smarty.foreach.m.iteration} </td>

{foreach key=key item=line_pos from=$line_mas_table name="mm"}

{if $key!="id" && $key!="ID"}

{assign name="alignstr" var="alignstr" value=$smarty.foreach.mm.iteration-1}

<td align='{$top_table[$alignstr][2]}'> {$line_pos} </td>

{/if}

{/foreach}

<td> <a href="{$delete}?id={$id}"><img src="images/b_drop.png"> </a></td>

<td> <a href="{$edit}?id={$id}"><img src="images/b_edit.png"> </a></td>

</tr>

{/foreach}

</table>

<a href={$action}>Добавить новую запись</a>

<br>

<a href = 'index.php'>Главная</a>

Шаблоны для вызова форм редактирования и добавления выглядят гораздо проще, т.к. содержат в себе только html-теги. В первую очередь в шаблонах указывается ссылка на скрипты, с которыми они связаны.

<form name = "add_city_form" action = "add_city_in_BD.php" method = "POST">

Город <input type = "text" name = "fio"> <br> <br>

Код <input type = "text" name = "phone"> <br> <br>

<input type = "submit">

</form>

Сами скрипты, находящиеся в основном каталоге содержат объекты и переменные, необходимые для верной работы шаблона. Так, например, следующий скрипт обеспечивает правильное отображение таблицы «city» ($top_table), возможность добавления, удаления и редактирования данных с помощью объявления переменных: action, delete, edit, которые в свою очередь ссылаются на соответствующие скрипты.

<?

define('DOC_ROOT', dirname(__FILE__) . '/');

require_once('smarty/Smarty.class.php');

require_once('class.mysql.php');

error_reporting(0);

$db = new mysql_db();

$db->getConnect('localhost','newbas','root','');

$top_table = array(

array ('№','20',''),

array ('Город','*',''),

array ('Код','80','center'),);

$sql = 'SELECT id, city, cod FROM city';

$result = $db->query($sql);

if (!$result) {

echo "Ошибка DB, запрос не удался\n";

echo 'MySQL Error: ' . mysql_error();

exit;

}

$template = new Smarty();

$template->assign('result', $result);

$template->assign('top_table', $top_table);

$template->assign('action', "add_city.php");

$template->assign('delete', "delete_city.php");

$template->assign('edit', "edit_form_city.php");

$template->display(DOC_ROOT.'templates/city.tpl');

$db->connectClose();

?>

Рассмотрим принцип работы скриптов на примере добавления информации в базу данных newbas, в таблицу klient. В основном каталоге проекта располагается скрипт add_client.php, ссылающийся на шаблон с аналогичным именем.

<?

define('DOC_ROOT', dirname(__FILE__) . '/');

require_once('smarty/Smarty.class.php');

error_reporting(0);

$template = new Smarty();

$template->display(DOC_ROOT.'templates/add_client.tpl');

?>

В свою очередь, в папке templates создан соответствующий шаблон add_client.tpl, формирующий внешний вид формы с помощью html-тегов.

<form name = "add_client_form" action = "add_client_in_BD.php" method = "POST">

В данной строке шаблона присваивается имя формы, и указывается ссылка на скрипт, реализующий непосредственное добавление информации в БД. И последним этапом является скрипт add_client_in_BD.php, реализующий основные функции внесения изменений в созданную базу:

<?

error_reporting(0);

if (!$link = mysql_connect('localhost', 'root', '')) {

echo 'Не удалось подключиться к mysql';

exit;

}

if (!mysql_select_db('newbas', $link)) {

echo 'Не удалось выбрать базу данных';

exit; }

$sql = "INSERT into klient (name, phone, address) values ('".$_POST['fio']."','".$_POST['phone']."','".$_POST['address']."')";

$result = mysql_query($sql, $link);

mysql_free_result($result);

header ("Location: http://lab1.local/client.php");

?>

Аналогичным образом реализованы и остальные скрипты для редактирования, добавления и удаления данных таблиц.