Студопедия

КАТЕГОРИИ:


Архитектура-(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




Оператор if, elseif, else

Функция foreach

Функция section

Синтаксис:

{section name="имя_секции"loop="переменная_для_выч-ния_числа_итераций"[,start="индекс_начальной_позиции"] [, step="шаг"] [,max="максимум_итераций"] [,show="показывать_ли_секцию"] }... {/section}

Секция Section - это цикл для обхода элементов массива. Обязательными являются параметры name, с помощью которого задается имя секции, и loop, который представляет собой переменную, определяющую число итераций цикла. Как правило, loop - это переменная типа массив, и число итераций секции равно числу элементов этого массива. Чтобы вывести переменную внутри цикла, нужно после имени переменной указать в квадратных скобках имя секции.

{section name=art loop=$title} Название: {$title[art]}<br>{/section}

Пример 15.8. Цикл для обхода элементов массива (html, txt)

Синтаксис:

{foreach from="имя_массива" item="имя_текущего_элемента"}... {/foreach}

Кроме того, можно использовать дополнительные атрибуты key - имя ключа для текущего элемента массива и name - имя цикла, с помощью которого можно будет получать доступ к его свойствам. Атрибуты from и item - обязательные.

Циклы foreach являются альтернативой циклам section. Действие функции foreach очень похоже на работу цикла foreach в языке PHP.

{foreach from=$articles item=art}Title: {$art}<br> {/foreach}

Пример 15.9. Цикл foreach (html, txt)

Циклы foreach имеют свои собственные свойства. Получить доступ к ним можно таким образом: {$smarty.foreach.foreachname.varname}, где foreachname - это имя цикла, заданное его параметром name, а varname - имя свойства.

Синтаксис:

{if выражение} блок_действий {elseif выражение1} блок_действий1 {else} блок_действий2{/if}

Действие оператора практически аналогично оператору if...elseif...else языка PHP. В выражениях могут использоваться следующие операторы сравнения: eq, ne, neq, gt, lt, lte, le, gte, ge, is even, is odd, is not even, is not odd, not, mod, div by, even by, odd by, ==,!=, >, <, <=, >=. Каждый из них обязательно должен быть отделен от окружающих его значений пробелами. В выражениях можно использовать круглые скобки и вызывать php-функции.

{if $name eq "Вася"} Добро пожаловать, Вася.{elseif $name eq "Петя"} Добро пожаловать, Петя.{else} Добро пожаловать. А вы кто?{/if}

Пример 15.10. Операторы if, elseif, else (html, txt)

{* этот пример не будет работать, поскольку не поставлены пробелы вокруг операторов сравнения *}{if $name=="Вася" || $name=="Петя"}...{/if}

Теперь, после знакомства с основными конструкциями 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=localhostdb=bookuser=ninapass=123

Скрипт (index.php), обрабатывающий написанный нами шаблон, может выглядеть таким образом:

Листинг 15.12. index.php (html, txt)

<?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");

?>

Как вы, скорее всего, заметили, программа получилась еще более громоздкой, чем в первых двух случаях, когда использовалась простая замена значений и шаблоны FastTemplate. Действительно, механизм Smarty гораздо более сложен, чем тот же FastTemplate, но зато и более функционален.

Заключение

Итак, в этой лекции было рассказано о том, что такое шаблоны и как их можно использовать при программировании web-приложений на языке PHP. Мы рассмотрели три способа решения задачи отображения сложного списка документов: с помощью функции регулярной замены, с помощью класса шаблонов FastTemplate и с помощью языка шаблонов Smarty. При этом мы познакомились с основными свойствами, методами и функциями классов FastTemplate и Smarty.

 

 

 

 

 

 




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 294; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.