Решение задачи с помощью шаблонов Smarty
Теперь, после знакомства с основными конструкциями Smarty, мы можем попытаться решить задачу отображения списка документов.
Шаблон списка будет выглядеть следующим образом:
{* Smarty template index.tpl *}
{config_load file="task.conf" }
<html>
<head><title>{#pageTitle#}</title>
</head>
<body>
<ol>
{section name=art loop=$title}
<li><a href="{$fulltext[art]}">
{$title[art]}</a>
({$author[art]})
<br> <p> {$abstract[art]}
{/section}
</ol>
</body>
</html>
В файле конфигурации task.conf будем хранить название страницы и параметры для доступа к базе данных:
# глобальные переменные
pageTitle = List of documents
[Customer]
pageTitle = «Список статей»
[Database]
host=localhost
db=book
user=nina
pass=123
Скрипт (index.php), обрабатывающий написанный нами шаблон, может выглядеть таким образом:
<?
define("SMARTY_DIR","c:/users/nina/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
$smarty->template_dir = "c:/smarty_dirs/book/templates/";
$smarty->compile_dir = "c:/smarty_dirs/book/templates_c/";
$smarty->config_dir = "c:/smarty_dirs/book/configs/";
$smarty->cache_dir = "c:/smarty_dirs/book/cache/";
// вышеприведенный блок лучше вынести в отдельный файл
$smarty->config_load("task.conf","Database");
$host = $smarty->get_config_vars("host");
$user = $smarty->get_config_vars("user");
$pass = $smarty->get_config_vars("pass");
$db = $smarty->get_config_vars("db");
$conn = mysql_connect($host, $user, $pass) or die("Cant connect");
mysql_select_db($db);
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$title = mysql_result($q,$i,"title");
$author = mysql_result($q,$i,"author");
$abs = mysql_result($q,$i,"abstract");
$full = mysql_result($q,$i,"fulltext");
$smarty->append(array(
title => $title,
author => $author,
abstract => $abs,
fulltext => $full ));
}
$smarty->display("index.tpl");
?>
Вариант 2
Листинг 15.12. index.php
Как вы, скорее всего, заметили, программа получилась еще более громоздкой, чем в первых двух случаях, когда использовалась простая замена значений и шаблоны FastTemplate. Действительно, механизм Smarty гораздо более сложен,
чем тот же FastTemplate, но зато и более функционален.