Объекты
 
  Смарти позволяет использовать в шаблонах объекты PHP. 
  Существуют два способа их вызова. Первый - зарегистрировать объект для 
  шаблона, затем вызвать его примерно так же, как и пользовательскую
  функцию. Второй - объявить объект для шаблона и использовать его, 
  как любую другую объявленную переменную. Первый метод гораздо аккуратнее 
  и безопаснее, так как у зарегистрированного объекта можно ограничить 
  свойства и методы. Но, в тоже время, зарегистрированный объект
  нельзя использовать в циклах, нельзя помещать в массив объектов 
  и так далее. Выбор способа за вами, но используйте по 
  возможности первый, чтобы максимально упростить синтаксис шаблона.  
 
	
  В безопасном режиме недоступны приватные методы и 
  функции (имена которых начинаются с "_").
  Если существует и метод, и свойство с одинаковыми именами, 
  то будет использован метод.
	
	
  Вы можете ограничить использование объекта только некоторыми 
  методами и свойствами. Для этого перечислите их в массиве и укажите
  этот массив третьим параметром при регистрации объекта. 
	
	
  По умолчанию, параметры из шаблона передаются объекту точно так же, 
  как и пользовательской функции. Первым параметром передаётся 
  ассоциативный массив, вторым - объект Smarty. Если вы хотите передавать 
  параметры по одному, как при традиционном обращении с объектами, установите
	 четвёртый параметр вызова в false.
	
 
  использование зарегистрированного или объявленного объекта
  
register_object("foobar",$myobj);
// если мы хотим ограничиться определёнными методами или свойствами, перечисляем их при регистрации
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// если мы хотим использовать традиционный способ передачи параметров объекту, регистрируем объект с соответствующим 
// флагом, установленным в false  
$smarty->register_object("foobar",$myobj,null,false);
// Так же мы можем объявить объект. Желательно создавать объект по ссылке.
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?>
ШАБЛОН:
{* вызываем зарегистрированный объект *}
{foobar->meth1 p1="foo" p2=$bar}
{* результат можно перегрузить в переменную *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
в результате получаем {$output}
{* вызываем объявленный объект *}
{$myobj->meth1("foo",$bar)}
]]>