myb design

Sifter (freeware)

A simple and functional (and free) template engine for PHP/Perl/Ruby/Python

シンプルで機能的なPHP/Perl/Ruby/Python用のテンプレートエンジンです。
導入のしやすさと、簡潔なテンプレートが特徴です。
条件分岐やループ(繰り返し)、外部テンプレートの読み込み、フォーム要素への値の埋め込みなど、機能も豊富です。
また、各言語で同じテンプレートを使用できるので、環境によって使い分けることができます。
(言語によって条件判定や演算の結果が異なることがあります)

詳しい使用方法はreferenceの各項目を参照してください。

PHP5、PHP4版(1.1.8) [download] (14.8KB)
Perl版(1.1.8) [download] (9.1KB)
Ruby版(1.1.8) [download] (7.7KB)
Python版(1.1.7) [download] (8.4KB)

GitHubでも公開しています。


confirmed environments

下記の環境で動作を確認しています。

  • PHP 4.4.7、5.2.8
  • Perl 5.8.8
  • Ruby 1.8.6
  • Python 2.5.1

installation

ダウンロードしたアーカイブを解凍し、Sifter.php(PHP5版)、Sifter.php4(PHP4版)、Sifter.pm(Perl版)、Sifter.rb(Ruby版)またはSifter.py(Python版)を任意の場所に設置してください。
sampleフォルダには、使用例が収録されています。


instruction

Sifterのテンプレートは簡潔です。
テンプレートは、スクリプトで指定した変数の値に置き換わる「置換タグ」({})、条件分岐や繰り返しなどの動作を指定する「制御タグ」(<!--@-->)の2種類のタグを使用して記述します。
制御タグはHTMLのコメントの形式なので、DreamweaverやGoLiveなどのツールでもテンプレートの編集が可能です。

テンプレート:

foo = {foo}
<!--@IF({condition}=='true')-->
OK
<!--@END_IF-->
<!--@LOOP(array)-->
loop = {loop}
<!--@END_LOOP-->

スクリプトも簡潔です。
Sifterオブジェクトを作成したら、set_varメソッドで変数を設定し、テンプレートファイル名を指定してdisplayメソッドを呼ぶだけです。

スクリプト:

[ PHP | Perl | Ruby | Python ]
<?php
// PHP
require('Sifter.php');
$template = new Sifter;
$template->set_var('foo', 'bar');
$template->set_var('condition', 'true');
$template->set_var('array', array(array('loop'=>1), array('loop'=>2), array('loop'=>3)));
$template->display('sample.tmpl');
?>

実行結果:

foo = bar
OK
loop = 1
loop = 2
loop = 3

詳しいテンプレート・スクリプトの記述方法はreferenceの各項目を参照してください。


reference


license

本ソフトウェアのライセンスは修正BSDライセンスに従います。

history

2009/06/14 1.1.8 EMBEDで、value="0"のラジオボタン、チェックボックスへの埋め込みができない不具合を修正しました。(PHP版、Perl版)
置換タグで、文字列の値に対し数値演算を行う際の不具合を修正しました。(Ruby版)
2009/04/08 1.1.7 set_varメソッドで配列変数を設定した際に、HTMLエンティティが変換されない不具合を修正しました。(Perl版)
EMBEDでの埋め込みを最適化しました。
2009/03/10 1.1.6 Python版を公開しました。
配列変数の要素数「#変数名_count」がLOOPの外でも使用できるようになりました。
EMBED、NOBREAKの効果がINCLUDEで読み込まれたテンプレートの内部でも継承されるようになりました。
IF、ELSE、?での条件式で使用できる比較演算子を各言語の仕様に合わせました。
置換タグでの演算結果を調整しました。(Perl版、Ruby版)
複数回displayメソッドを呼んだときのバグを修正しました。
set_replace_tagメソッドで置換タグの開始文字列と終了文字列が変更できなかったバグを修正しました。(Ruby版)
2008/01/06 1.1.5 Ruby版を公開しました。
置換タグで、クオーテーション、バックスラッシュ、改行をエスケープするオプションを追加しました。
置換タグで、オプションの記述方法を変更しました。
2007/12/14 1.1.4 StrictなPHP5に対応しました。PHP4版はSifter.php4に分岐しました。
LOOPでELSEを使用したときの不具合を修正しました。
EMBEDで大文字のタグへの埋め込み時の不具合を修正しました。
PHP版で、IF, ELSE, ?の条件式で「~」演算子を使用したときの不具合を修正しました。
PHP版で、ELSE, ?の条件式として「0」を使用したときの不具合を修正しました。
2007/08/26 1.1.3 制御タグで、?(三項条件演算子風の記述)が使用可能になりました。
PHP版で、警告が表示されていた不具合を修正しました。
2007/08/03 1.1.2 処理速度を改善しました。(a little...)
PHP版で、<input>への埋め込み時の不具合を修正しました。
2007/03/31 1.1.1 Perl 5.00503で動作するようになりました。
置換タグで、改行文字を<br />に変換するオプションを追加しました。
set_var、append_varで、convert_htmlの省略値をtrueに変更しました。
PHP版で、<textarea>への埋め込み時の不具合を修正しました。
2007/03/03 1.1.0 公開。

不具合が発生した場合はお使いのPHP/Perl/Ruby/Pythonのバージョンとともにfeedbackからお知らせください。