Шаблонизаторы. Smarty Урок № 5
Термины и определения Представление – логика приложения отвечающая за отображение данных. Для WEB приложений это та логика, которая формирует HTML страницу. Домен – Часть приложения отвечающая за обработку данных, то есть содержащая бизнес-логику приложения. Шаблон – Файл, содержащий HTML и некоторые маркеры, позволяющий этот шаблон обработать и сформировать на его основе конечный HTML код. Шаблонизатор – приложение, осуществляющее обработку шаблона.
Суть проблемы <body> <table> <tr><td> ФИО</td><td>Место</td></tr> <? php //сделан запрос в БД и получен результат в переменную result while ($row=mysql_fetch_assoc($result)){ echo “<tr><td>”. $row[‘fio’]. ”</td>”; echo “<td>”. $row[‘place’]. ”</td></tr>”; } ? > </table> </body>
Структура приложения • Бизнес логика – часть приложения, которая получает и обрабатывает данные; • Логика представления – часть приложения, которая показывает данные пользователю. Веб приложение: • HTML код - Логика представления • База данных и СУБД - Бизнес логика • PHP обрабатывает данные, производит вычисления + отвечает как и что будет показано => PHP - ? ? ?
Шаблонизатор • Шаблонизатор – делает разделение логики удобнее • Шаблонизатор не отделяет бизнес логику от представления в строгом смысле.
SMARTY • Smarty — компилирующий обработчик шаблонов для PHP, один из инструментов, позволяющих отделить прикладную логику и данные от представления в духе концепции Model-view-controller. • Язык шаблонов Smarty расширяет HTML smarty-тегами, встраиваемыми в документ.
Что может Smarty • Создавать пользовательские функции и модификаторы. • Использовать настраиваемые разделители тегов шаблона: {}, , и т. д. • Возможность включения PHP-кода прямо в шаблон. • Пользовательские функции кэширования. • Использование компонентной архитектуры.
Пример. PHP код //lesson 6_1. php require_once('smarty/Smarty. class. php'); //Подключили файл с классом $smarty = new Smarty(); $smarty->template_dir = 'templates/'; $smarty->compile_dir ='smarty/templates_c/'; $smarty->config_dir = 'smarty/configs/'; $smarty->cache_dir = 'smarty/cache/'; //----------------Работаем с кодом------------------$smarty->assign("title", 'Титул для страницы'); $smarty->assign("variable 1", 'Яблоко'); $smarty->display('templates/lesson 6_1. tpl');
Пример. Шаблон //листинг lesson 6_1. tpl <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows 1251"> <title>{$title}</title> </head> <body> переменная = {$variable 1} </body> </html>
Условные конструкции {if $variable 1} Переменная задана {else} Переменная не задана {/if} {if $variable 2=='Яблоко'} Яблоко {else} Груша {/if}
Перебор ассоциативного массива Листинг lesson 6_3. php //----------------Работаем с кодом--------------------try{ $DBH=new PDO("mysql: host=localhost; dbname=testbase", "root", ""); $DBH->set. Attribute( PDO: : ATTR_ERRMODE, PDO: : ERRMODE_EXCEPTION ); $STH=$DBH->prepare("SELECT * FROM my. Table"); $STH->set. Fetch. Mode(PDO: : FETCH_ASSOC); $STH->execute(); $data = $STH->fetch. All(); //весь результирующий набор в массив } catch(PDOException $e){ $data=false; } $smarty->assign('my. Array', $data);
Шаблон <body> <table border=1> {foreach item=stud from=$my. Array} <tr> <td>{$stud. fio}</td> <td>{if $stud. gender==1}мужской {else}Женский {/if} </td> <td>{$stud. actor}</td> </tr> {/foreach} </table> </body>
Стандартное разделение страницы
Стандартное разбиение шаблона $smarty->display('templates/header. tpl'); $smarty->display('templates/main. tpl'); $smarty->display('templates/footer. tpl');
Как это работает $smarty->display('templates/header. tpl'); Загружен хидер и левое меню $smarty->display('templates/main. tpl'); Загружена основная часть $smarty->display('templates/footer. tpl'); Загружен футер
Структура приложения /template /css /main. php => main. tpl /list. php => list. tpl /search. Form. php => search. Form. tpl /search. Process. php => search. Process. tpl / list. tpl /add. Form. php =>add. Form. tpl /add. Process. php => add. Process. tpl / header(“Location: /”);
Задача • • Разбить шаблон на 3 части (хидер, футер, мейн) Слева сформировать меню Страница добавления нового студента Страница вывода студентов (всех / форма поиска студентов)