Эта статья будет посвящена основам технологии Smarty. Я не буду здесь углубляться в полное описание всех возможностей Smarty – все это можно найти на официальном сайте, здесь я хочу раскрыть те моменты, которые мне самому поначалу никак не открывались, так что мне пришлось заплатить одному смышленому пареньку, который на примере мне все показал.
Вкратце о том, для чего нужен Smarty:
[spoiler]
Smarty помогает отделить программный php код от html кода, выделяя последний в отдельные файлы. Не всем нравится такой подход, кому то больше по душе перемешать в кучу php и html и потом сутками сидеть и искать где что. Мне больше нравится Smarty, так как единажды написав php код я могу его больше не трогать, а если мне понадобиться что нибудь изменить в нем я легко это сделаю, так как кроме php кода в файле ничего нет, по большому счету, мы разбиваем на два файла то, что было в одном, и это очень помогает избежать хаоса, это я знаю по личному опыту, так как ранее Smarty не использовал.
Smarty – это шаблонизатор. С его помощью мы создаем набор html файлов, которые при прохождении через компилятор Smarty создают php файлы – то есть, Smarty делает за нас грязную работу, создавая те самые файлы, в которых смешан в кучу php и html код, фактически, Smarty и использует только эти php файлы для построения страниц
[/spoiler]
Итак, для начала работы Smarty нам нужно скачать библиотеку Smarty, положите ее в отдельную папочку, например, libs, в итоге мы получим путь до библиотеки libs/smarty.
Следующим шагом создадим php скрипт инициализации Smarty следующего содержания.
Обратите внимание, вам нужно будет создать папки
$smarty->template_dir = ‘./templates/mytemplate/’;
$smarty->compile_dir = ‘./templates/mytemplate/compile/’;
$smarty->cache_dir = ‘./templates/mytemplate/cache/’;
и собственно в папке mytemplate мы будем создавать файлы шаблонизатора (*.tpl).
ЗЫ: название папки может быть любое.
ВАЖНО! на папку compile нужно устанавливать права 777.
define('SMARTY_DIR', 'libs/smarty/'); // указываем путь до библиотеки Smarty require_once(SMARTY_DIR . 'Smarty.class.php'); // название файла библиотеки $smarty = new Smarty(); // инициализация Smarty $smarty->template_dir = './templates/mytemplate/'; // путь к шаблону Smarty $smarty->compile_dir = './templates/mytemplate/compile/'; // путь к скомпилированным файлам $smarty->cache_dir = './templates/mytemplate/cache/'; // путь к папке для кэшированных файлов $smarty->caching = false; // отключаем кэширование $smarty->error_reporting = E_ALL; // вывод всех ошибок в смарти
Назовем этот файл init.php. Далее мы будем подключать его во всех файлах, в которых будет задействован Smarty.
Следующий шаг – создание php скрипта с примером работы Smarty
require_once('init.php'); // подключаем файлик инициализации $myvar='Это какой то текст для показа работы Smarty.'; // назначаем переменной какое то значение $smarty->assign('myvar', $myvar); // говорим смарти, что переменная Smarty myvar принимает значение переменной php $myvar $smarty->display('page.tpl'); // подгружаем файл шаблона. в котором будут происходить чудеса
Далее нам нужно создать, собственно, файл шаблона page.tpl, с html кодом и переменными Smarty
<html> <head> <title>Банальный заголовок по типу моя первая страница на смарти</title> </head> <body> {$myvar} </body> </html>
Теперь переходим на наш скрипт, и получаем вывод значения переменной, определенной в php файле.
Для удобства я разбиваю html на три части: хедер, футер и центр. Соответственно, при определении подгрузки шаблонов получается примерно такая запись
$smarty->display('header.tpl'); $smarty->display('page.tpl'); $smarty->display('footer.tpl');
Это здорово экономит время, так как эти части постоянно повторяются во всем сайте, и нет смысла повторять их в каждом файле шаблона.
Это был простой вывод значение переменной, но что делать когда у нас есть циклы?
Следующий пример показывает как Smarty работает с циклами
<?php // естественно прописываем коннект к нашей БД $sql = mysql_query("SELECT * FROM tbl WHERE active ='1' ORDER BY id ASC"); $query['count'] = mysql_num_rows($sql); if ($query['count']>0) { while($art = mysql_fetch_array($sql)) { $arts['list'][] = $art; } } $smarty->assign('arts', $arts); // передаем смарти массив $smarty->display('header.tpl'); $smarty->display('arts.tpl'); $smarty->display('footer.tpl'); ?>
и файл шаблона
{foreach from=$arts.list item=art} {$art.title}<br /> {/foreach}
полагаю, здесь все понятно: в шаблоне мы делаем перебор массива, и выводим данные из массива.
При назначении значения переменным смарти можно использовать назначение значений массиву
$smarty->assign(array( 'var1' => $somevar1, 'var2' => $somevar2, 'var3' => $somevar3 ));
опять же – экономия времени и места.
Смарти по синтаксису очень похож на php
{if ($myvar==1)} это выводим если myvar равна 1 {elseif ($myvar==2)} а здесь myvar равна 2 {else} а тут что то другое {/if}
вот вкратце все, на самом деле смарти намного обширнее, и позволяет использовать множество интересных и полезных функций, но описывать их здесь нет смысла, так как все они прекрасно описаны на оф сайте.
Желаю удачи в освоении Smarty! =)
