ヒント & 裏ワザ 空白の変数の扱い テーブルの背景が適切に機能するように   を出力する場合のように、空白の変数が何も出力しない代わりに デフォルトの値を出力したい場合があるかもしれません。 そのために多くの人は {if} {if}ステートメントを使用すると思いますが、Smartyによる変数の修飾子 default を使った簡略な方法があります。 Undefined variable というエラーが表示されるのは、 PHP の error_reporting()E_ALL になっており、変数が Smarty に代入されていない場合です。 変数が空白の時、  を出力する default 修飾子および 変数のデフォルトの扱い も参照してください。 変数のデフォルトの扱い 変数がテンプレートの至る所に頻繁に使われる場合、それが記述されるたびに変更子 default を用いると少し見苦しくなりがちです。この場合、 {assign} 関数によって変数にデフォルト値を割り当てる事でこれを改善する事ができます。 デフォルト値をテンプレート変数に割り当てる default 修飾子および 空白の変数の扱い も参照してください。 ヘッダテンプレートにタイトルの変数を渡す テンプレートの大半が同じヘッダ及びフッタを使用する場合は、それらを単体のテンプレートに分割して {include} するのが普通です。 しかしどのページから呼び出されたかによって、 そのヘッダに異なるタイトルを持たせる必要があるとすればどうなるでしょうか? インクルードされる際に、タイトルを 属性 としてヘッダに渡す事ができます。 ヘッダテンプレートにタイトルの変数を渡す mainpage.tpl - メインページを描画する際に、 Main Page というタイトルを header.tpl に私、それをタイトルとして使用します。 archives.tpl - アーカイブページを描画する際には、 タイトルは Archives となります。 この例では、ハードコーディングされた変数ではなく archives_page.conf から変数を取得していることに注意しましょう。 header.tpl - $title 変数が設定されていない場合に、 Smarty News と表示します。これは default 修飾子を使用して実現しています。 {$title|default:'Smarty News'} ]]> footer.tpl ]]> 日付 経験上、Smarty に渡す日付は常に タイムスタンプ型 にしておくことをお勧めします。これにより、テンプレートデザイナーは date_format 修飾子で日付の書式を自由にコントロールできるようになります。 また、必要なら日付の比較も簡単に行えます。 date_format の使用 出力はこのようになります。 出力はこのようになります。 テンプレートで日付を比較するには、タイムスタンプを使用します。 テンプレートで {html_select_date} を使用する場合、 おそらくプログラマはフォームからの出力をタイムスタンプ型に変換したいでしょう。 それを行うのに役立つ関数を次に示します。 フォームの日付要素をUNIXタイムスタンプ型に変換する ]]> {html_select_date} {html_select_time} date_format および $smarty.now も参照してください。 WAP/WML WAP/WML テンプレートはテンプレートコンテンツに加え、php によって Content-Type ヘッダ が渡される必要があります。これを実行する容易な方法は、 ヘッダを出力するカスタム関数を記述する事です。 もし キャッシュ を有効にしている場合はキャッシュは機能しないので、 {insert} タグを用いて出力を行います ({insert} タグはキャッシュされない事を覚えていて下さい)。 もしテンプレートの前にブラウザに何か出力されていると、 ヘッダの出力は失敗する可能性があります。 WML Content-Type ヘッダを出力するために {insert} を使用する ]]> Smarty テンプレートは、次のように insert タグから始まる必要があります。

Smarty 版の WAP へようこそ! OK を押すと次に進みます……

どう?簡単でしょ?

]]>
コンポーネント化したテンプレート 習慣的に、アプリケーションにテンプレートをプログラミングする手順は次のように進みます。 はじめに php アプリケーションにおいて変数を蓄積します (おそらくデータベースのクエリーによって)。それから Smarty オブジェクトのインスタンスを作成して変数を割り当て (assign())、 テンプレートを表示 (display()) します。仮に株式相場表示を行うテンプレートがあったとしましょう。 これは php アプリケーションにより株式情報のデータを収集し、 テンプレートにこれらの変数を割り当てて表示します。 もし、前もってデータを取得する事を気にせずに、 テンプレートを単にインクルードする事で株式相場表示をアプリケーションに追加できれば良いと思いませんか? これは、内容をフェッチし、テンプレート変数に割り当てるための カスタムプラグインを書くことで実現できます コンポーネント化したテンプレート function.load_ticker.php - このファイルを プラグインのディレクトリ においてください。 assign($params['assign'], $ticker_info); } ?> ]]> index.tpl {include_php}{include} および {php} も参照してください。 E-mail アドレスを混乱させる これまでに、あなたの E-mail アドレスが多数のスパムメーリングリストにどのように載るのか 不思議に思った事はありませんか?その一つの方法として、スパム発信者は web ページ上の E-mail アドレスを収集しています。この問題に対抗するために、E-mail アドレスが HTML ソース内では混乱した JavaScript に見えるがブラウザでは正しく表示されるという方法が使えます。 これは {mailto} プラグインによって行われます。 E-mail アドレスを混乱させる例 {mailto address=$EmailAddress encode='javascript' subject='Hello'} に問い合わせを送る ]]> テクニカルノート この方法は 100% 確実という訳ではありません。 もしかしたらスパム発信者はこれらの値を解読するためのコードを書くかもしれません。 ですがそれはまず有り得ないでしょう…… おそらく…… 今のところは…… 量子コンピュータってどうなったんでしょう :-? escape 修飾子および {mailto} も参照してください。