КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |