Как написано в Википедии smarty - это компилирующий обработчик шаблонов для PHP, один из инструментов, позволяющих отделить прикладную логику и данные от представления.
А, говоря простым языком, это означает следующее. Как Вы знаете, сайт состоит из различных информационных блоков (новости, навигационное меню, реклама, ссылки) и просто графической обшивки (дизайна). Даже сам основной контент сайт, это всего лишь блок, который содержит индивидуальный текст для каждой странички сайта.
Теперь представьте себе, каждый такой блок хранится в обычной переменной, а переменная вставляется в обычную html страничку, и в результате получается уникальная страничка. А уникальна она тем, что в каждую страничку вставляется переменная, которая отличное от предыдущей странички значение.
Таким образом и работает шаблонная технология smarty. У Вас есть шаблон страницы, красиво оформленной html странички, но без текстового наполнения. Текст Вы можете, например, получать из базы данных, заносить его в переменную, потом переменную вставлять в оформленную html страничку и выдавать ее пользователю. Что же тут особенного, а то, что для создания красивого сайта, Вам понадобится лишь одна или несколько универсальных страничек, красиво оформленных, а создавать на основе ее Вы можете 1000-чи уникальных информационных страниц сайта.
Давайте, рассмотрим небольшой пример созданного сайта на основе шаблонной технологии Smarty и Вам все станет понятно.
Тест-платформой сделаем бесплатно скачанный шаблон с уже готовыми рисунками и библиотекой css. Сайт, который мы собираемся сделать будет выглядеть примерно как на рисунке слева. Как Вы видите на рисунке, сайт будет состоять из навигационного меню (слева, вверху), новостного блока (слева, внизу) и контентной (текстовой) части (справа, ниже). Таким образом, наш шаблон будет состоять из всех элементов, кроме вот этих блоков. На каждой страничке сайта будет свой уникальный контент. А что касается новостей и навигационного меню, то хотя они и будут повторятся, однако они могут динамически изменятся, например, добавятся свежие новости, или появится новое подменю.
Итак, пример динамического сайта с использованием smarty будет состоять 3-x шагов:
1 шаг - создать папку с библиотекой smarty, которую надо подключить;
2 шаг - написать код php, в котором будут наши переменные и которые в последствие будут вставляться в шаблон, а также подключить библиотеку Smarty;
3 шаг - создать сам шаблон, куда все будем вставлять.
Для того, чтобы Вы не тратили свое время на перекопированние кода, который наведен ниже, можете скачать уже
[..]
[smarty_library] - это папка с библиотекой smarty, переписываем всю ее сюда;
[tpl] - папка с шаблонами;
[cache]
[configs]
[templates]
[index.tpl] - это наш основной шаблон страницы
[news.tpl] - это вспомогательный шаблон страницы
[templates_c] - НЕ ЗАБУДЬТЕ ПРАВА ПОСТАВИТЬ 777 (для записи)
[images] - папка с рисунками;
[css] - папка с css стилями;
[index.php] - непосредственно наш индексный файл.
Ну что ж, давайте сделаем первый шаг навстречу сайту и установим библиотеку smarty.
Для начала работы со smarty, скачайте его последнюю версию на официальном сайте
Ее содержание будет выглядеть вот так:
[..]
[internals]
[plugins]
[Config_File.class.php]
[debug.tpl]
[Smarty.class.php] - этот файл мы будем подключать для вызова библиотеки Smarty
[Smarty_Compiler.class.php]
Перекопируйте все это, со всем содержимым внутри, в папку нашего проекта [smarty_library]. Далее создайте папку
[tpl], а в ней подкаталоги
Теперь переходим ко второму шагу и создаем файл [index.php]. Содержимое файла будет следующее:
<?php
/*********************** подключаем библиотеку smarty ***********************/
define('SMARTY_DIR','smarty_library/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty ();//объект smarty
$smarty->template_dir='tpl/templates/';//указываем путь к шаблонам
$smarty->compile_dir='tpl/templates_c/';
$smarty->config_dir='tpl/configs/';
$smarty->cache_dir='tpl/cache/';
/***************************** создаем переменные php ************************/
$arr_meta_tags['title'] = "Мой личный хостинговый сайт";
$arr_meta_tags['keywords'] = "хостинг, площадка, хостинг-услуги";
$arr_meta_tags['description'] = "Лучший хостинговый сайт предоставит хостинг-услуги по оптимальным ценам";
$arr_meta_tags['content'] = "Хостинг – это услуга, по размещению вашего сайта на сервере, за которым следят квалифицированные специалисты, поддерживающие его работоспособность 24 часа в сутки и 7 дней в неделю. Не многие хостинг-компании способны предоставить хорошие условия, и только единицы могут дать приемлемое для вас соотношение цены и качества. Таковой компанией является Hostland.";
$arr_meta_tags['news'] = array ('1' => array('date' => '09/12/2008', 'title' => 'Смена банковских реквизитов', 'text' => 'Уважаемые клиенты, обращаем Ваше внимание на то, что с 29 октября 2008 года у нас сменились реквизиты.'), '2' => array('date' => '11/12/2008', 'title' => 'Обновление линейки тарифных планов', 'text' => 'Теперь на всех наших тарифах еще больше места, еще больше доменов.'));
/********************************** производим анализ ************************/
if (!empty($_REQUEST['page']) && $_REQUEST['page'] == "about") {
$arr_meta_tags['content'] = "С каждым днем растет число сайтов созданных для развлечений – это сайты об играх, фан сайты, сайты досуга, в том числе «домашние» страницы и т.д. Никогда еще не было так просто, чем сегодня, открыть свой сайт. И если для бизнес проектов важным аспектом выбора хостинга является стабильность и надежность, то для некоммерческих, мало бюджетных сайтов главным оставалось и остается – доступность, т.е. невысокая цена. Мы предлагаем уникальное решение, делая свои услуги доступным для всех пользователей сети и даем гарантии качества и надежности.";}
$arr_meta_tags['content'] = "Уважаемые клиенты, уважаемые пользователи!
Коллектив компании Hostland.Ru от всей души поздравляет Вас с наступающим новым годом.
Этот год был очень насыщенным для нашей компании, мы славно потрудились, но многое впереди!
Мы поздравляем Вас, желаем всем успехов в бизнесе, благополучия в семье и крепкого здоровья! С НОВЫМ ГОДОМ!";}
/************* передаем значение переменных php в переменные smarty *************/
$smarty->assign('title',$arr_meta_tags['title']);
$smarty->assign('keywords',$arr_meta_tags['keywords']);
$smarty->assign('description',$arr_meta_tags['description']);
$smarty->assign('news',$arr_meta_tags['news']);
$smarty->assign('content',$arr_meta_tags['content']);
$news_tpl = $smarty->fetch("news.tpl");
$smarty->assign('blok_news',$news_tpl);
/*********************** запускаем показ шаблона smarty ************************/
$smarty->display("index.tpl");
?>
Давайте, кратко пройдемся по содержимому файла. Итак, начинается файл с подключения библиотеки smarty, для этого мы прописываем путь к библиотеке, создаем объект и прописываем для объекта пути к шаблонам.
Папки templates_c, configs и cache являются системными для библиотеки, а детально про это Вы можете почитать в документации FAQ Smarty.
Далее мы создаем текстовые переменные, из которых информация будет вставляться в шаблон. На практике всю информацию Вы будете хранить в отдельных файлах или в базах данных.
Под анализом данных в примере подразумевается проверка поступлений с помощью методов Get или Post переменной 'page' со значениями, которые обозначают какую страницу запросил пользователь. В данном примере будут создаваться 3 уникальные странички - это "Главная", "Про нас", "Наши клиенты". Остальные Вы сможете создать немного разобравшись и модернизировав этот пример.
И, наконец, самая интересная часть - передача значений переменных php в переменные smarty. Как видите, делается это простой операцией: $smarty->assign('description',$arr_meta_tags['description']), где description - это будущее имя переменной smarty, а $arr_meta_tags['description'] сама переменная php.
Остановимся на таком моменте, посмотрите на эту функцию: $news_tpl = $smarty->fetch("news.tpl"). Знаете что она делает? Присваивает переменной php уже готовый блок новостей. Как же он появился, ведь у нас была лишь переменная php массива с новостями? А все очень интересно, smarty позволяет создавать множество дополнительных шаблонов, которые создаются с помощью функции fetch, а потом встраиваются в основной шаблон . Давайте посмотрим из чего состоит дополнительный шаблон [news.tpl]:
<div
style="font-size:12px;padding-bottom:16px;"><span
style="font-size:11px;">{$new.date}><span
style="font-weight:bold;">{$new.title}>{$new.text}
<br>
<span
style="font-size:10px;"><a
href="#">подробнее</a>
</span>
</div>
{/foreach}
Если Вы уже знакомы с языками программирования и работой с массивами, то команда foreach будет Вам знакома. А если еще не успели, то Вы должны знать, что smarty поддерживает небольшой перечень логических структур управления и среди них такие как: if и foreach. Команда foreach работает с массивами и означает что с каждым элементом массива (в данном случае $news) выполнить нижеследующий код. И таким образом, внутренняя переменная new будет в порядке очереди каждым элементом массива $news. Чтобы все понять комплексно, еще раз вернемся назад и посмотрим на такую цепочку в файле [index.php]:
$smarty->assign('news',$arr_meta_tags['news']);//создаем массив $news (она же переменная smarty) с новостями
$news_tpl = $smarty->fetch("news.tpl");/*обработали дополнительный шаблон, с каждым элементом и подэлементом массива выполнили код и занесли в переменную php уже готовый блок новостей*/
Если Вы еще не поняли, как обрабатывать дополнительные шаблоны, оставьте это на потом, в первое время можно обойтись и без этого.
Следующим и последним третьим шагом будет создание основного шаблона, в котором в определенных местах будут находится переменные smarty. Давайте посмотрим содержимое файла [index.tpl]:
<!DOCTYPE HTML PUBLIC "
-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251"><META
HTTP-EQUIV="Pragma" content="no-cache"><META
HTTP-EQUIV="Expires" Content="Mon, 28 Mar 1999 00:00:01 GMT"><meta
name="Document-state" content ="Dynamic"><meta
name="description" content="{$description}"><meta
name="keywords" lang="ru" content="{$keywords}"><meta
name=Robots content="all">
<link
href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div
id="wrap">
<div
id="conteiner">
<table
width="100%" border="0" cellspacing="0" cellpadding="0">
<tr
valign="top">
<td>
<div
class="company_name">
Web-хостинговые услуги</div><div
class="company_name_shadow">
Web-хостинговые услуги</div>
<img
src="images/p2.jpg" alt="image">
<div
class="lmenu">
<a
href="?page=main">Главная</a>
<a
href="?page=about">Про нас</a>
<a
href="?page=our_clients">Наши клиенты</a>
<a
href="#">Площадки</a>
<a
href="#">Наши цены</a>
<a
href="#" style="background:url(images/lbullet2.gif);background-repeat: no-repeat;background-position: 14px 8px;">Контакты</a>
</div>
<div
class="lblock">
<h2>
Поcледние новости</h2>
{$blok_news}
</div>
</td>
<td ><table
width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<img
src="images/p1.jpg" alt="" width="515" height="267"></td>
</tr>
<tr>
<td
class="body_txt"><h1>Приветствуем Вас на нашем хостинговом сайте!</h1>
{$content}
<br>
</td>
</tr>
</table></td>
</tr>
</table>
</div></div>
<div
id="footer">
<div
class="bottom_menu">
<a
href="#">Главная</a>
<a
href="#">Про нас</a>
<a
href="#">Наши клиенты</a>
<a
href="#">Площадки</a>
<a
href="#">Наши цены</a>
<a
href="#">Контакты</a>
</div>
<div
class="bottom_addr">© 2008 Company Name. Все права защищены.</div>
</div>
</body>
</html>
Вы видите обычную страничку html, а в ней {$keywords} такого рода символы. Эти символы, согласно синтаксиса библиотеки smarty, ее переменные. Их значение мы устанавливаем в файле [index.php] таким вот способом:
$smarty->assign('keywords',$arr_meta_tags['keywords']);//где keywords означает {$keywords} в шаблоне.
Ну вот, пожалуй и все, еще раз напоминаю, что Вы можете скачать полностью готовый и работающий вышеприведенный пример сайта с использованием шаблонной технологии smarty (в готовом примере работает три первые ссылки в главном меню и генерируется блок новостей).
Ко всему выше добавлю что использование smarty значительно облегчит Вашу задачу по созданию своего сайта. Сделав один шаблон, Вы можете создавать на основе немного множество интересных страниц сайта. А использование дополнительных шаблонов, дает Вам возможность любую конструкцию Ваших страниц. Удачи!