Smartyとは
PHPで使うテンプレートエンジン。
本記事の目的
筆者はBladeなら触ったことがある。(Laravel内で)
ちょっと古いソースでSmartyが使われてて行き詰まったので一度ガッツリ学習する。
個人的に気になった部分だけ書いていく。自分用メモです。
特徴
最初の一度だけコンパイルされる
2. コンパイルは一度だけ行われるので、テンプレートを毎回解析するような無駄がない
キャッシュの部分かな。
プラグイン追加ができる
6. プラグイン機能も備えている
うむ、後から参加してソース解析する人にとっては問題を複雑にさせますね。
利用方法
公式サイト(https://www.smarty.net/)からダウンロード
公式サイトは↑ですな。
まだまだ開発止まってないんですね。
その後、PHPプログラムから require_once ‘libs/Smarty.class.php’; のように Smarty.class.php を読み込めばOKです。(Smarty.class.php がSmartyの本体です。)
手順としては、
- Smarty.class.phpを読み込む
↓
Smartyを使用するには、まずは Smarty クラスを呼び出します。
$smarty = new Smarty();
基本構文
全てのテンプレートタグはデリミタによって囲まれます。デフォルトではデリミタは { と } ですが、これは 変更可能 です。
うむ、変更されることで、後から参加してソース解析する人にとっては問題を複雑にさせますね。
- デリミタはデフォルトでは、{ と }
コメント
コメントの書き方は以下
{* コメントです *}
{**}で囲うんですね。
変数
{}で囲えば中身はphpの変数って印象ですな。
- {$foo} ・・・ 通常の変数
- {$foo[4]) ・・・ 配列
- {$foo->bar} ・・・ プロパティ
- {$foo->bar()} ・・・ メソッド
ちょっとphpの変数と違うやつ:
- {$foo.bar} ・・・連想配列。この場合、キーが「bar」
- コンフィグファイル変数
- {#foo#} ・・・・・・・・・ configファイル変数”foo”を表示
- {$smarty.config.foo} ・・・ configファイル変数”foo”を表示(上述のとおんなじ)
- {$smarty.server.SERVER_NAME} ・・・ サーバ変数
コンフィグファイル変数ってなに?Smarty用のconfigファイルに変数を定義してそれを取得するっってことかな?
⇒正解。
⇒https://www.smarty.net/docsv2/ja/language.config.variables.tpl
関数
組み込み関数
Smarty内部で動作するもの。
例:
- {if}
- {section}
- {strip}
カスタム関数
自由に修正・追加できる。プラグインで利用する。
関数の構文
使い方はどちらの関数も構文は同じで、{funcname attr1=’val1′ attr2=’val2′} のように関数名とその 属性 をデリミタで囲みます。
使用例:
-
{config_load file=’colors.conf’}
-
{include file=’header.tpl’}
属性ってなんやねん。。。関数の引数と違うの?
↓
属性
Smarty 関数の属性は HTML の属性にかなり近いものです。属性には、静的な値や変数を使用することができます。
関数の引数とはちょと違うみたいっすな。。
例:
-
{html_select_date display_days=yes}
-
{mailto address=’test@foo.com’}
htmlの属性に近い感覚。
演算子
演算子は、変数の値に直接適用されます。
加算:{$foo + 1}
減算:{$foo – 1}
乗算:{$foo * $bar}
除算:{$foo / $bar}複雑な例)
{$foo->bar – $bar[1] * $baz->foo->bar() – 3 * 7}{if ($foo + $bar.test%$baz * 134232 + 10 + $b + 10)}
{assign var=”foo” value=”`$foo + $bar`”}
これは全部参考になったので丸コピしました(._.)
テンプレートにJavascriptやCSSを混ぜたいとき
記述しやすくするために、2つ方法がある。
- デリミタである{ } を別のものに変える
- 指定区間内は{ } をSmartyのデリミタとして扱わない
1.デリミタである{ } を別のものに変える
Smarty の $left_delimiter および $right_delimiter を変更することでデリミタを独自変更し回避する
$smarty->left_delimiter = ‘<!–{‘;
$smarty->right_delimiter = ‘}–>’;
開始を意味するデリミタを、
<!–{
に、
終了を意味するデリミタを、
}–>
にしてますな。
テンプレート
格納場所
指定方法
以下を、Smarty.class.php 内に記述する。
template_dir プロパティで、テンプレートを格納する場所を指定します。
デフォルト
標準では「templates/」 を格納場所とみなします
デフォルトは、templates/ ですが、明示的に指定したほうがよいとのこと。
コンパイル済み(のテンプレート)の指定
格納場所
指定方法
以下を、Smarty.class.php 内に記述する。
compile_dir プロパティで、コンパイル済みテンプレートを格納する場所を指定します
デフォルト
標準では「templates_c/」 を格納場所とみなします。
デフォルトは、templates_c/ ですが、明示的に指定したほうがよいとのこと。
よく使う構文
テンプレート表示
$smarty->display(‘test.html’);
その他は↓の参考にしたサイトなどを参照すてください。
コメント