いまさらだがSmarty入門

php
スポンサーリンク

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つ方法がある。

  1. デリミタである{ } を別のものに変える
  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’);

その他は↓の参考にしたサイトなどを参照すてください。

 

 

参考にしたサイト

【初心者向け】PHP Smartyとは?使い方を徹底解説! - WEBCAMP MEDIA
PHPは、サイトを構築していくにあたって、とても使いやすい言語です。 なぜかというと「PHPはHTMLと親和性の高いスクリプト言語」といわれているからです。 しかし多くのページ、複雑な構造のページなど ...

コメント