---
title: "Про Smarty и велосипеды."
description: "Решил написать ответ на пост eudj1n.Мало кто из кодеров, интересуется \"внутренностями\" сторонних би..."
author: "NeD"
published: "2008-07-11T04:27:22+00:00"
modified: "2008-07-11T04:27:22+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/pro-smarty-i-velosipedy-1513"
markdown_url: "https://yvision.kz/post/pro-smarty-i-velosipedy-1513/markdown"
site_name: "Yvision.kz"
---

# Про Smarty и велосипеды.

> Решил написать ответ на пост eudj1n.Мало кто из кодеров, интересуется "внутренностями" сторонних би...

Решил написать ответ на пост eudj1n.
Мало кто из кодеров, интересуется "внутренностями" сторонних  библиотек, фреймворков и т.д.
Так и я использовал Smarty, и было счастье :) Но природное любопытство взяло своё. Решил посмотреть на Smarty изнутри.
Увидев это огромное количество кода, ничего кроме как "WTF?!" в голову не пришло.
Покапавшись немного в коде, решил что лучше "изобретать велосипеды, чем ездить на тракторах" (c).

Написали с коллегой (

![Про Smarty и велосипеды.](http://yvision.kz/images/userpic_small.jpg)

[p0is0n](http://p0is0n.yvision.kz/)) маленький шаблонизатор NanoTpl.

```
 &$v) { $$k = $v; } self::$vars = array(); } $level = error_reporting(); error_reporting(E_ALL); ob_start(); include(TPL_DIR . DIRECTORY_SEPARATOR . self::$tpl); $out = ob_get_contents(); ob_end_clean(); error_reporting($level); self::$tpl = null; } else { trigger_error('template "' . self::$tpl . '" not found', E_USER_WARNING); } return $out; } /** * Отображает шаблон * * $tpl - имя шаблона */ public static function display($tpl="main.tpl") { self::assign('content', self::$buffer); self::$buffer = self::fetch($tpl, true); self::$globals = array(); print self::$buffer; } }?>
```

Мал по размерам, быстро работает.Всегда готов к работе))
Приведу здесь небольшое сравнение Smarty и NanoTpl.

Smarty

```
template_dir = '/web/www.domain.com/smarty/templates'; //директория с шаблонами$smarty->compile_dir = '/web/www.domain.com/smarty/templates_c'; //тут "скомпилированные" шаблоны$smarty->cache_dir = '/web/www.domain.com/smarty/cache'; //кеш$smarty->config_dir = '/web/www.domain.com/smarty/configs'; //еще дирректория :)$tags = array('php','Smarty','шаблонизатор'); //создаём массив$smarty->assign('name','eudj1n'); //передаём в шаблон данные$smarty->assign('tags',$tags);$smarty->display('main.tpl'); //отображаем главный шаблон?>
```

Сам шаблон

```
Smarty//передадим привет eudj1n-у. :)Hello, {$name}! //отобразим значения массива{foreach from=$tags item=tag}{$tag}{/foreach}
```

NanoTpl

```

```

Сам шаблон

```
Smarty//передадим привет eudj1n-у. :)Hello, ! //отобразим значения массиваforeach ($tags as $tag){?>
```

Как видите NanoTpl  прекрасно справляется со своей работой. И работа с ним ничють не сложнее чем со Smarty.
Многие наверно сейчас скажут, что использовать php в шаблонах - зло. Т.к. можно писать туда всё что хочешь (запросы к бд и т.д.)
Кстати и разработчики Smarty используют это, как плюсик в безопасности шаблонизатора:
"Security: Templates do not contain PHP code.Therefore, a template designer is not unleashed with the full power of PHP, but only the subset of functionality made available to them from the programmer (application code.)"
Но стоит ли жертвовать производительностью в пользу такой сомнительной "безопасности"?
Вы можете существенно доработать NanoTpl под свои нужды, т.к. он только и умеет что передавать данные в шаблон.
Хочу еще раз сказать: небойтесь изобретать велосипеды. Делая это вы несомненно приобретёте опыт и возможно ваш велосипед будет лучше чем соседский :)

---

Source: [https://yvision.kz/post/pro-smarty-i-velosipedy-1513](https://yvision.kz/post/pro-smarty-i-velosipedy-1513)