Wiki-учебник по веб-технологиям: PHP/РешениеЗадачи ...

Главная | |

Решение задачи с помощью шаблонов 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, но зато и более функционален.