EC studio EC studio 技術ブログ

2008年08月07日投稿者:山本 正喜

もっと前に知っておきたかった!と思うSmartyのTips

PHPでSmartyを活用されている方は多いかと思いますが、
何年もたって「実はこんな機能があったのか~!」と後から
気づくことが多々あります。

今回は私がもっと前に知っておけば良かったと
思う機能を中心にいくつかご紹介します。

テンプレート内で定数を使用する

PHPでdefineされた定数をテンプレートで使用したい場合、

  1. {$smarty.const.XXXX}

でアクセスできます。(XXXX は定数名)

  1. {if $smarty.const.XXXX == 'ABC'}
  2.  
  3. {/if}

なんて書き方もできます。

PHPの組み込み関数を使用する

PHPの組み込み関数はそのまま修飾子として使用できます。

  1. {$str|trim}

これで$strに対してtrim関数があたります。

  1. {$str|strip_tags}
  2. {$str|strtoupper}
  3. {$str|mb_strlen}
  4. {$str|rtrim:"/"}
  5. {$str|htmlspecialchars:$smarty.const.ENT_QUOTES}

などなどいろんな応用が考えられますね!

修飾子に渡すパラメータがそのまま関数の
第二引数以降への引数になります。

参照:smarty.netのマニュアル 変数の修飾子

関数プラグインに対して修飾子を適用する

実は、修飾子は変数だけでなく関数に対しても適用できます。

{func}という関数プラグインと、
|mod という修飾子プラグインがあるとします。

  1. {func arg=$aaa}

という関数があった場合、

  1. {func|mod:aaa arg=$aaa}

という書き方で関数の結果に対してmod修飾子を
あてることができます。

また、

  1. {func arg=$aaa|mod:aaa}

とすれば引数に対して修飾子を個別にあてることができます。

ブロック関数は

  1. {block}
  2.  
  3. {/block|mod:aaa}

でOK! (閉じタグにあてるのがポイント)

これは便利です。

テンプレートパス、プラグインパスを複数使用する

通常Smartyを使う場合、

  1. require_once(SMARTY_DIR.'Smarty.class.php');
  2.  
  3. $smarty = new Smarty();
  4.  
  5. $smarty->template_dir = '/path/templates/';
  6. $smarty->compile_dir  = '/path/templates_c/';
  7. $smarty->config_dir   = '/path/configs/';
  8. $smarty->cache_dir    = '/path/cache/';

こんな感じで設定するかと思いますが、
実はこのプロパティ、配列も受け付けます。

  1. require_once(SMARTY_DIR.'Smarty.class.php');
  2.  
  3. $smarty = new Smarty();
  4.  
  5. $smarty->template_dir = array(
  6.     '/path/templates/',
  7.     '/path/common_templates/');
  8. $smarty->config_dir   =  array(
  9.     '/path/configs/',
  10.     '/path/common_configs/');
  11. $smarty->compile_dir  = '/path/templates_c/';
  12. $smarty->cache_dir    = '/path/cache/';

こんな感じで配列を渡せば、
include_pathに指定したかの様に、
その順番でファイルの読み込みを行ってくれます。

共通でよく使うテンプレートなどを、
この方法でシステム間共有するととても便利です。

また、plugins_dir も配列で指定できます。

configのiniファイルで使える拡張文法

Smartyでは設定ファイルとしてiniファイルを読む機能があります。

  1. $smarty->config_load('config.ini');

読み込んだiniファイルの値は、テンプレート内で

  1. {#var#}

として参照できます。
iniファイルは文法がとても簡単なので、デザイナーと協業するときなどに
商品名や住所など変わる可能性があるものを
iniファイルで管理しておくととても便利です。

実はこのiniファイル、PHPの組み込み関数である
parse_ini_file関数を使っていません。

Smartyのインストールフォルダにある、
Config_File.class.php というクラスで、
自前でiniファイルを解析しているのです。

なぜそんなことをしているのか?

おそらくですが、PHPのparse_ini_file関数には
致命的な欠点があって、変数の値に
ダブルクォーテーションが使えないのです。

parse_ini_fileでダメな例

  1. var = '<div style="color:red">重要</div>'

これはエラーになってしまいます。
SmartyのConfig_File.class.phpを使うとこの記述で
ちゃんと意図通りに取得できます。

また、"""~"""という書き方をサポートしています。

  1. var = """<html>
  2. <body onload="init()">
  3. テスト
  4. </body>
  5. </html>
  6. """

こうすれば、変数の中に改行でも " でも ' でも
自由に含めることができてとても便利です。

おそらく、SmartyのiniファイルはHTMLタグを含む可能性があるので、
自前でiniファイルを解析するライブラリを持っているのだと思います。

参照:smarty.netのマニュアル 設定ファイル

このiniを解析するライブラリは他でも活用できるので、
単体で読み込んで使っても便利です。 :)


知らないものはありましたか?

他にも何か「もっと前に知っておきたかった!」と思うようなものが
あれば、是非コメントで教えてください!


関連した記事:

■「iPhoneとツイッターで会社は儲かる」

ツイッター全社導入によるメリット・デメリット、
導入して起きた効果、社内への落とし込み方、
iPhone とツイッター、iPhone 活用方法、
さらには、iPhone×ツイッター×Google Apps™によって起こる
クラウド上のコミュニケーション革命について詳細に解説します。
最終章にはGoogle 代表取締役社長 辻野氏との対談を収録。

「iPhoneとツイッターで会社は儲かる」

ブックマークプラス by SEO対策

この記事へのコメント (0)

コメントはまだありません。

コメントを投稿

取材に関するお問い合わせ

090-1489-4909(担当:大崎)

EC studio 採用情報の詳細はこちら

投稿者
全ECスタッフ導入の
おすすめソフトウェア
人気のエントリー
カテゴリー
最近のエントリー
アーカイブ
RSSリーダーに登録する
  • はてなRSSに追加
  • livedoor Readerに追加
  • My Yahoo!に追加
  • Googleに追加
  • goo RSSリーダーに追加
  • Bloglinesに追加
  • Technoratiに追加
  • PAIPOREADERに追加
  • newsgatorに追加
  • feedpathに追加

Powered by SEO対策
RSSプラス

RSSの購読者数を増やす
RSSプラスを設置しませんか?

BLOG オフィシャルブログ

社長ブログ
EC studio社長ブログ

ブログを読む

技術ブログ
技術部のブログ

ブログを読む

デザインブログ
デザイン部のブログ

ブログを読む

Copyright© EC studio, All Rights Reserved.