Вы бы вызвали $ smarty-> fetch () из скрипта, а не из шаблона. Вы можете использовать логику, чтобы выбрать другое имя шаблона и выбрать любой подходящий шаблон, поэтому один скрипт может легко вызвать любой из ваших шаблонов.
Например ...
$template = 'error.tpl';
if($conditions =='right')
{
$template = 'normal.tpl';
}
echo $smarty->fetch("layout/$template");
Также обратите внимание, что вы можете использовать метод display () вместо echo с fetch ():
$smarty->display("layout/$template");
Таким образом, вы не сохраняете шаблон в переменной, которую вы просто собираетесь вывести.
Если это простой случай, когда один скрипт вызывает шаблон "A", а другой вызывает шаблон "B" ...
//call in template A
$smarty->display("layout/templateA.tpl");
//call in template B
$smarty->display("layout/templateB.tpl");
В этом случае нет необходимости в дополнительной логике.