Теперь, после знакомства с основными конструкциями 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"); ?>
Листинг 15.12. index.php
Как вы, скорее всего, заметили, программа получилась еще более громоздкой, чем в первых двух случаях, когда использовалась простая замена значений и шаблоны FastTemplate. Действительно, механизм Smarty гораздо более сложен, чем тот же FastTemplate, но зато и более функционален.