Smarty для начинающих

Эта статья будет посвящена основам технологии 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! =)

Как Вы находите статью "Smarty для начинающих"?

Результаты

Завантажується ... Завантажується ...