Ялта-Интурист
- 1 year ago
- 0
- 0
TinyButStrong (сокр. TBS) это относительно лёгкий интерпретирующий обработчик веб-шаблонов для PHP . В ряде интернет обзоров перечислен в списке лучших на PHP .
Инструмент TinyButStrong был спроектирован таким образом, чтобы можно было разрабатывать шаблоны при помощи простого использования визуальных редакторов (например, Dreamweaver или FrontPage ), а также он позволяет создавать скрипты JavaScript в динамическом режиме. Данный инструмент содержит в себе всего 8 функций, при этом обеспечивает высокую эффективность работы. Это позволяет объединять шаблоны с переменными PHP или системами управления базами данных MySQL , PostgreSQL или SQLite .
В отличие, например, от Smarty не является вариацией на тему процедурного языка программирования, а использует механизмы привязки тегов шаблона к структуре и тегам HTML . Это упрощает его использование с WYSIWYG редакторами HTML. Также включает средства непосредственного подключения SQL запросов (без предварительного формирования из них массивов) к шаблонам TBS и.т.д.
Разработчики относят TBS к шаблонным системам третьего типа, где первый тип — это использование в качестве шаблонной системы самого PHP , а второй — программируемые шаблоны, такие как в Smarty .
Библиотека реализована в виде PHP- класса , который может быть расширен пользовательскими плагинами и распространяется под лицензией LGPL . Плагины включает в себя набор функций PHP или один класс PHP, который должны соответствовать специальному синтаксису, рассчитанному шаблонизатором TBS. Например: плагины базы данных - упрощают процесс распознания новых типов базы данных,другие плагины помогают пользователю добавлять к TBS рабочие функции или изменять его главные методы, что делает шаблонизатор более специализированным.
Пользователями различных CMS и CMF разработаны модули привязки этого шаблонного движка. Среди таких систем можно назвать Joomla , MODx , CodeIgniter , Kohana , Symfony и др.
Класс-расширение этой библиотеки TinyButStrong OOo, позволяющий генерировать документы в формате OpenOffice.org , в октябре 2005 занял 5-е место в PhpClasses Innovation Award — конкурсе, проводимом популярным сайтом .
Основной недостаток TBS — невысокое быстродействие. Эта библиотека выполняет достаточно сложный анализ HTML кода в момент формирования HTML-страницы из шаблона (TinyButStrong — в отличие от Smarty, это не компилирующий обработчик шаблонов). Впрочем проблема может быть решена путём подключения плагина кеширования.
Другой тонкий момент заключается в том, что при всей простоте начального освоения этого обработчика шаблонов, для его достаточно «продвинутого» использования необходимо понимать внутренние механизмы работы библиотеки. В противном случае слишком легко написать шаблон с ошибкой, непредусмотренным поведением, или имеющий катастрофически низкое быстродействие.
Простота использования TinyButStrong (особенно совместно с WYSIWYG редакторами HTML ) часто приводит к применению его в сайтах-однодневках, которые из за отсутствия поддержки или ошибок в исходном коде веб-приложения вскоре перестают нормально функционировать. Поиск в google по строке «TinyButStrong error» даёт достаточно грустную статистику подобной «популярности» этой библиотеки.
Следующий код выведет содержимое таблицы MySQL в виде «полосатой» HTML таблицы.
HTML часть:
<html>
<body>
<p align="center" class="title-page">Пример подключения данных из MySQL</p>
<table border="1" align="center" cellpadding="2" cellspacing="0">
<tr bgcolor="#CACACA">
<td width="50"><strong>Место</strong></td>
<td width="150"><strong>Ник</strong></td>
<td width="50"><strong>Очков</strong></td>
<td width="100"><div align="center"><strong>Дата</strong></div></td>
</tr>
<tr bgcolor="#F0F0F0">
<td>[blk1.#]</td>
<td>[blk1.res_name;block=tr]</td>
<!-- выражение block=tr декларирует границы блока, неявного цикла по записям blk1 -->
<td><div align="right">[blk1.res_score]</div></td>
<td><div align="center">[blk1.res_date;frm='mm-dd-yyyy']</div></td>
</tr>
<!-- два одноимённых блока трактуются как секции одного и того же блока, -->
<!-- которые, если не указано иное, выполняются последовательно друг за другом -->
<tr bgcolor="#E6E6E6">
<td>[blk1.#]</td>
<td>[blk1.res_name;block=tr]</td>
<td><div align="right">[blk1.res_score]</div></td>
<td><div align="center">[blk1.res_date;frm='mm-dd-yyyy']</div></td>
</tr>
<!-- Секция NoData выполняется только если блок не содержит данных -->
<tr bgcolor="#E6E6E6">
<td colspan="4" bgcolor="#FFCFB9">[blk1;block=tr;nodata]Данные отсутствуют.</td>
</tr>
</table>
<p align="center">Выведено [blk1.#] строк.</p>
</body>
</html>
PHP-часть:
<?php
include_once('tbs_class.php') ;
// Подключаемся к БД
if (!isset($_SERVER)) $_SERVER=&$HTTP_SERVER_VARS ; //PHP<4.1.0
require($_SERVER['DOCUMENT_ROOT'].'/cnx_mysql.php');
// Файл cnx_mysql.php содержит следующие строки:
// $cnx_id = mysql_connect('localhost','user','password') ;
// mysql_select_db('dbname',$cnx_id) ;
// создаём экземпляр TBS
$TBS = new clsTinyButStrong ;
// подгружаем шаблон
$TBS->LoadTemplate('tbs_us_examples_datamysql.htm') ;
// подключаем данные для вывода в таблице
$TBS->MergeBlock('blk1',$cnx_id,'SELECT * FROM t_tbs_exemples') ;
// закрываем БД
mysql_close($cnx_id) ;
// Выводим HTML
$TBS->Show() ;
?>