※以下、Smartyに限った話では無い。他のテンプレートエンジンに置き換えてもOK。
 優劣を付ける目的でもありませんのであしからず。

●Smartyをアダプタとして考える

Client(テンプレート)はInterface(Smarty構文)に合わせておけば、
Adapter(Smarty)が適切に処理してくれる。

 (Client) {$hoge|escape}(テンプレート)
 (Target) SmartyInterface(Smarty構文)
 (Adapter) Smarty
 (Adaptee) htmlspecialchars()

上の場合、escapeの実装が変更になったり、htmlspecialcharsが廃止されたとしても、
Adapterの委譲先を変えれば良く、Clientは何も意識する必要は無い。

Adapteeがフレームワークだろうが、PHP以外の言語だろうが、Clientからすれば関係無く
Interfaceに従っておけばAdapterが対応してくれる。


フレームワーク独自のテンプレートエンジンも、上記パターンにあてはめる事が出来るが、
InterfaceがAdapteeを前提とした設計である事が多く、
Interfaceを維持したままAdapteeを変える事は現実的では無い。

当然、その設計による恩恵も多々ある。

しかし、デザインとロジックがきっちり分別されている場合、、
Interfaceに「変数処理、条件分岐、ループ、インクルード、フォーム系ヘルパ」程度があれば、
大抵のClientは実装出来てしまう場面も多々あると思う。

そんな場合はフレームワークから独立したテンプレートエンジンを採用する事で、
学習コストを減らし共通の構文が使える等のメリットを受けられる場合もある。