Pluginオブジェクトまわりについて

JSmartyにはテンプレート関係のAPI(assignやdisplay)以外にも色々なオブジェクトを用意しているのですがその中のPluginオブジェクトの紹介。テンプレートエンジンとしての機能を利用しなくても以下のように活用できます。

便利な使い方

JavaScriptでsprintfしたい!あとグローバル領域を汚したくないし…っていうときに使えます。JSmarty.jsをコールするとグローバル領域は基本的にJSmartyしか増えません。

<script src="JSmarty.js"></script>
(function()
{
    // 注意:初回呼出はSAJAXで呼出すので時間がかかる。
    // 2回目以降はキャッシュ呼び出しています。
    var sprintf = JSmarty.Plugin.getFunction('php.sprintf');
    alert(sprintf("%02d", 1)); // 01
})();

alert(sprintf); // undefined
  • sprintfやstrftimeはJSmartyのパッケージ(JSmarty/internals)に標準配布されています。
  • JSmartyに標準配布されているもの以外を利用するには自作してphp.***.jsとして任意のディレクトに保存する必要があります。ここにあるかも??? ⇒ http://code.google.com/p/p2js/

API紹介

書式 説明
getFunction(ファイル名[, 保存先]) ファイル名に指定された関数を解析してその関数を返します。保存先は対象ファイルがあるディレクトリになります。省略時はaddRepositoryで指定されたディレクトリ。
addPlugin(ファイル名[, 保存先]) ファイル名に指定された関数を解析してその結果を返します。何か問題があればfalse。うまくいけばtrue。
addRepository(dir1[, dir2]) 上の保存先が省略されたときに標準として読込ディレクトリを指定します。あらかじめ設定されているのは["."]と["JSmarty/internals"]です。
importer(ファイル名) getFunctionやaddPluginで追加した関数をグローバル領域にコピーしどこからでも利用できるようにする関数。
toString() 現在、読み込まれている、あるいは登録されている関数やプラグインのリストを出力します。

対応バージョン

0.3.1から。addRepositoryとか作って便利にした。0.3.1は07/4/14リリース(http://d.hatena.ne.jp/shogo4405/20060727/1153977238)