Jump to content
  • 0

Для чего нужен Smarty


Vlad
 Share

Question

Практически все хоть раз да слышали о разделении кода и содержания, текста и оформления, отделения логики от представления. Смысл в том, чтобы программный код был максимально независим от дизайна сайта. Это позволяет:

1. вести работу над дизайном и программированием одного сайта параллельно;

2. легко вносить изменения, не боясь что-нибудь ?испортить?;

3. быстро делать редизайн всего сайта или отдельных его разделов;

4. добавлять новые программные модули без существенной переделки HTML-кода.

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

Применение Smarty достаточно удобно, но многим разработчикам в первое время может показаться непривычным. Сайт при использовании Smarty разбивается на два основных блока ? программы и шаблоны. Программа это ?чистый? PHP-код, но не содержащий никаких echo и других способов вывода. Шаблон же по структуре напоминает HTML-документ, перемежающий специальными smarty-переменными.

Алгоритм работы сайта в этом случае следующий.

1. Загружается PHP-программа, она получает все необходимые данные формы, GET или POST-запроса. Например, адрес страницы htmlbook.ru/content/?id=100 означает, что требуется обратиться к базе данных (БД) и получить запись с идентификатором 100.

2. После получения запрашиваемой информации программа записывает результат в специальные smarty-переменные.

3. Эти переменные передаются обработчику Smarty.

4. Загружается нужный файл с шаблоном.

5. В шаблоне вместо переменных отображается запрашиваемая из БД информация.

Связь между программой и шаблоном осуществляется с помощью своих переменных.

Программа на PHP ? переменные ? шаблон Smarty

Остается только обговорить вначале имена переменных, чтобы они совпадали в коде и шаблоне. Значения этих переменных, как вы понимаете, не важны, поскольку они могут меняться по ситуации.

Разделение оформления и кода не единственное достоинство шаблонизаторов. В частности, Smarty берет на себя множество функций по модификации результатов, например, вывода текста и даты. Так, можно выводить дату в любом требуемом формате, преобразовывать текст в верхний или нижний регистр, подсчитывать число строк. Также легко сделать в таблице чередование белых и серых строк, выводить данные только по определенному условию, включать или выключать кэширование целых страниц или отдельных блоков. Короче говоря, возможности Smarty ограничены лишь нашей фантазией и, конечно, знаниями этих возможностей.

Ниже приведены краткие примеры требуемых файлов, чтобы вы оценили, о чем идет речь.

Файл index.php

<?php
require_once ("inc/path.php");
require_once ("inc/db.php");
require (SMARTY_DIR . "setup.php");
$smarty = new Smarty_Htmlbook;
if(isset($_GET["id"])) {

$id = intval($_GET["id"]);

$result = mysql_query("SELECT * FROM sbs_content WHERE content_id= $id");
$row = mysql_fetch_array($result);
$smarty->assign("title", $row["content_title"]);
$smarty->display('sbs.tpl');
} else
$smarty->display('index.tpl');
?>

После загрузки программа проверяет, указана ли в GET-запросе переменная id. Если да, то из БД извлекается заголовок статьи и передается в Smarty в виде переменной title. Далее загружается шаблон с именем sbs.tpl. В том случае, когда id нет, то идет загрузка шаблона index.tpl. Как видите, шаблонов может быть неограниченно много и их можно загружать по необходимости.

Файл sbs.tpl

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>htmlbook.ru - {$title|default:"Учебники по HTML и CSS"}</title>
</head>
<body>
...
</body>
</html>

TPL-файл выглядит как обычный HTML-документ за исключением {$title}. Вместо этой переменной будет выведен текст, полученный из БД. Если по каким либо причинам значение этой переменной не определено, то будет вставлен текст по умолчанию. Он указывается в кавычках внутри переменной.

Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0
А я ничего не перепутаю, если скажу, что это механизм, на которых построены все cms?

Что то перепутаешь. Не все.

чем Smarty отличается от других движков :)

Тем, что смарти - не движок, а шаблонизатор.

Link to comment
Share on other sites

  • 0
В таком случае буду просто рад почитать статьи на эти темы. Посоветуете что - нибудь, проверенное на сво?м опыте.

Зайди на сайт Smarty, у них есть хорошая подробная документация на русском языке, где подробно описано, что и для чего.

Link to comment
Share on other sites

  • 0

С одной стороны Смарти - мощный шаблонизатор. С другой, шаблоны, сделанные на нем в конечном итоге оборачиваются сценариями, которые компилируются сценарием, написанным на ПХП и выполняются на ПХП. Получается замкнутый круг.

Тем более, что язык ПХП изначально задумывался, как шаблонизатор для Перла.

Впрочем, Смарти действительно лучшее, что можно было бы придумать. Т.к. использование не компилирующих шаблонизаторов ведет к сильной загрузке сервера. Да и другие компилирующие шаблонизаторы (тот же Flexy) не предоставляют той гибкости и простоты, как Смарти.

Link to comment
Share on other sites

  • 0

в общем движок без бД это Guppy (работает сразу после заливки на хост)), я хочу написать аналогичный (хакеры уже заколебали бд взламывать..)

Smarty юзают в-основном e-магазины, данные пересылаются через скрытые формы..

Прич?м самая "фишка"

и приходится переворачивать все ф-ции, чтобы найти ,кто принял эти данные из отправляемой формы (так пришлось взламывать ф-ции оформления покупки - хозяевам магазина не понравилось, чтобы купить товар, приходилось заполнять много ненужных форм. Методом блокнота, выявлено - все ф-ции расширения(корзина, заказ товара) находятся в папке core-func, их и надо ломать, чтобы угодить покупателям..)) если интересно, можете писать viipru@mail
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy