PHP・Smarty

テンプレートから動的にページを作成するSmarty

2021/01/20 updated.

BlocksCMSはPHPのテンプレートエンジンライブラリー「Smarty」を使って動的にページを表示している。

テンプレートにSmartyのコードを記述することで任意の値を表示したり、条件判断して表示・非表示などを制御することができる。

テンプレートはSmartyでコンパイルし保存し、HTMLを出力する場合はコンパイルしたファイルを使うので高速に表示される。
変更があったテンプレートを再度コンパイルされる。変更有無の判断はテンプレートファイルのタイムスタンプで行われるので場合によってはコンパイルされない場合がある。その時はコンパイルファイルを削除することでコンパイルされる。

テンプレートの拡張子は「tpl」。

Smartyコードの基本構造

Smartyのコードはデリミタ({ })で囲まれている。
デリミタ外の内容は静的コンテンツとして表示される。

Smartyコードの記述例

  • コメント {* コメント *}
  • 変数 {$foo}
  • 配列 {$foo[1]}
  • 連想配列 {$foo.bar}

【Smarty】構文を無視する関数 literal

2021/01/21 updated.

{literal} タグに囲まれたテキストは、リテラル(定数・定型)として認識される。

JavaScriptやスタイルシートを直接記述するとSmartyがコンパイル時に構文解析エラーとなるので、{literal} タグ囲むと対象から外れるて解析しない。

書式

{literal}..{/literal}

【Smarty】日付フォーマット date_format

2021/01/20 updated.

日付を指定の形式にフォーマットする

書式

{$変数名|date_format:フォーマット文字列}

PHPのstrftime()関数のフォーマットに基づいて整形します。

書式

  • %Y - 西暦4桁
  • %y - 西暦下2桁
  • %m - 月2桁(01から12)
  • %d - 日2桁(01から31日)

{$date|date_format:"%Y-%m-%d"}
> 結果 2021-01-20

漢字だと文字化けする場合もある
対象の文字を数値文字参照にすると文字化けしない

年・月・日

date_format:"%Y 年 %m 月 %d 日"
> 結果 2021 年 01 月 20 日