Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

Использование шаблонизатора 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 …} может быть настолько простым или сложным, насколько это требуется. Возможно неограниченное вложение секций, условий и т.д.

 

Изначально проект строился по довольно сложной схеме, сочетая в одном файле 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");

?>

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




Поделиться с друзьями:


Дата добавления: 2015-06-30; Просмотров: 418; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.029 сек.