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

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

Вкратце о том, для чего нужен Smarty:

Показать »

Smarty помогает отделить программный php код от html кода, выделяя последний в отдельные файлы. Не всем нравится такой подход, кому то больше по душе перемешать в кучу php и html и потом сутками сидеть и искать где что. Мне больше нравится Smarty, так как единажды написав php код я могу его больше не трогать, а если мне понадобиться что нибудь изменить в нем я легко это сделаю, так как кроме php кода в файле ничего нет, по большому счету, мы разбиваем на два файла то, что было в одном, и это очень помогает избежать хаоса, это я знаю по личному опыту, так как ранее Smarty не использовал.
Smarty — это шаблонизатор. С его помощью мы создаем набор html файлов, которые при прохождении через компилятор Smarty создают php файлы — то есть, Smarty делает за нас грязную работу, создавая те самые файлы, в которых смешан в кучу php и html код, фактически, Smarty и использует только эти php файлы для построения страниц

Итак, для начала работы 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 для начинающих"?

Результаты

Загрузка ... Загрузка ...
Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.