- •Создание Web-интерфейса администрирования MySql базы "Телефонные переговоры" с помощью php-скриптов
- •1. Задание на курсовую работу по дисциплине «Корпоративные информационные системы»
- •Цель курсовой работы
- •Содержание задания
- •2. Введение
- •Проектная часть
- •Создание базы данных MySql
- •Анализ технического задания База данных "Телефонные переговоры"
- •Создание сайта с использованием php-скриптов
- •3.1.2 Создание базы данных «Телефонные переговоры»
- •Использование шаблонизатора smarty
- •3.3.1 Шаблонизатор Smarty
- •3.3.2 Использование шаблонов smarty в проекте
- •Заключение.
Использование шаблонизатора 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");
?>
Аналогичным образом реализованы и остальные скрипты для редактирования, добавления и удаления данных таблиц.
