Home > PHP

Smartyの基本的な使い方

2009.12.02 23:40

Smartyが使えるかどうか確認してみる

 PHPにてSmartyが使えるようにしてみました。組み込み型のモジュールなのでユーザーが自由にダウンロードして自分のディレクトリ内で使えますが、オムニオレンタルサーバー内ではデフォルトで Smartyを利用できます。

 Smartyをインクルードパスにセットする際には以下のパスが使えます。
(オムニオレンタルサーバー以外では違うパスかもしれませんので、管理者に問い合わせてみてください。)

  • /usr/lib/Smarty/libs
  • /usr/local/lib/Smarty/libs
 実際のSmartyが起動しているかどうかの確認は以下のスクリプトで試してみてください。

<?php

set_include_path('/usr/local/lib/Smarty/libs:' . get_include_path());
//または、/usr/lib/Smarty/libs

@include('Smarty.class.php');

if (class_exists('Smarty')) {
    $smary =& new Smarty;
    printf("you can use Smarty(version %s).\n", $smary->_version);
} else {
    echo "you can't use Smarty.\nplease install Smarty library.";
}

?>
you can use Smarty(version 2.6.19).というメッセージが出たら成功です。
も しyou can't use Smarty.please install Smarty library.というメッセージが出たら、インクルードパスが間違っているかSmartyがインストールされていないか...、あるいは何らかの理由で Smartyが機能していないということになります。サーバーの管理者などに問い合わせてみるとよいでしょう。

基本的な使い方

  Smartyの基本的な使い方は非常に簡単です。上記のスクリプトでSmartyが使えることを確認できたら、以下のように設定を進めます。

//Smatyライブラリ読み込み
define('SMARTY_DIR', '/usr/local/lib/Smarty/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');

//Smartyのインスタンスを作成
$smarty = new Smarty();

//各ディレクトリの指定
$smarty->template_dir = '../smarty/templates/';
$smarty->compile_dir  = '../smarty/templates_c/';//パーミッションは777
$smarty->config_dir   = '../smarty/configs/';
$smarty->cache_dir    = '../smarty/cache/';
   
$error_title = 'エラー!';
$smarty->assign("title", $error_title);
$error_message = 'エラーメッセージをここに!';
$smarty->assign("error_message", $error_message);

$smarty->display("error_template.tpl"); //テンプレートを出力

 まず、Smartyのパスを定義します。先のスクリプトで成功した場合はそのままそのパスを入れてください。オムニオレンタルサーバーでは上記のパスで動きます。
 それからSmatyのクラスファイルを呼び出します。インクルードパスを定義しているのでそのパスからの相対パスで大丈夫です。
 次にSmartyのインスタンスを作成します。これも定型通り。
 Smartyはテンプレートを呼び出す他にもキャッシュファイルを作成したりといろんなことをします。とりあえず上記の4つのディレクトリが揃えば充分です。ディレクトリパスはSmartyを呼び出すPHPファイル本体からの相対パスになります。ここではsmartyというディレクトリ内にそれぞれのディレクトリを配置しています。便宜変更して構いません。注意点はtemplates_cのコンパイルディレクトリのみパーミッションを777に設定してください。
 
 テンプレートファイルは '../smarty/templates/'のディレクトリに格納します。テンプレートの作成は通常のHTMLのように書いて変換して出力したい部分を {$title}のようにSmarty特有の変数で置き換えます。例えば、ヘッダ内のタイトル部分などを変換したい場合は、
<html>
    <head>
        <title>{$title}</title>
    </head>
    <body>
        <h1>{$error_message}</h1>
    </body>
</html>
のように書くだけです。ファイル名はここではerror_template.tplとしています。拡張子は特別決まっていませんが、わかりやすいように.tplとしておくことをお勧めします。
 それから、変数を定義します。例では、$smarty->assign("title", $error_title);となっていて、これは$smarty->assign("<テンプレート内の変数名>", <置換する文字列>);という感じです。先の{$title}というテンプレート内の変数名はここで定義します。
 ここでは簡単にスカラー変数のみを定義していますが、配列などの変数をテンプレートに反映させることもできます。(それは後日解説します。)
 最後に$smarty->display("error_template.tpl");でもってテンプレートを指定して出力します。テンプレートのパスは先ほどの$smarty->template_dir = '../smarty/templates/';で起点を設定しているのでこの起点からの相対パスになります。
 以上で簡単なテンプレートを出力することができます。

配列をSmartyに設定する

 上記までの例は、単純にスカラー変数をテンプレートに流し込むという方法でした。あるひとかたまりの意味をもつ配列変数をテンプレートに反映させるには、以下の方法で行います。

インデックスの付いた配列をSmartyテンプレートに設定

 まずは、PHP本体のスクリプトに
$test_array1 = array ('蜜柑', '林檎', 'グレープフルーツ', 'レモン');
というような配列があったとします。この配列は、数字のインデックスのついた、
$test_array1[0] = '蜜柑';
$test_array1[1] = '林檎';
$test_array1[2] = 'グレープフルーツ';
$test_array1[3] = 'レモン';
という変数です。これらをテンプレート内で表示させるにはスカラー変数と同じようにまずはassign しなくてはなりません。
$smarty->assign('test_array1', array('蜜柑', '林檎', 'グレープフルーツ', 'レモン'));
という風に定義します。形式は見ての通り簡単で、$smarty->assign('<配列の変数名>', array('<変数1>', '<変数2>', '<変数3>'));という感じです。これらの変数をテンプレート内でhtml表記するには、
{$test_array1[0]}<br />
{$test_array1[1]}<br />
{$test_array1[2]}<br />
{$test_array1[3]}<br />
となります。とても簡単です。foreachを使ったループで出力することも可能ですが、ここではちょっと複雑になるので割愛します。次に連想配列の出力方法です。

連想配列をSmartyテンプレートに設定

 連想配列をSmartyで使用するには、以下のような方法をとります。
$test_array2 = array (
    'number' => '0001,
    'name' => 'オムニオ太郎',
    'adress' => '国分寺市光町1-15-12'
);
このような連想配列があった場合には、
$smarty->assign(test_array2', array('number' => '0001', 'name' => 'オムニオ太郎', 'adress' => '国分寺市光町1-15-12'));
というようにassignしておきます。この場合、勿論、
$smarty->assign(test_array2', $test_array2);
という書き方もできます。インデックスの場合の配列も同様です。
 さてテンプレート内での書き方はどんな感じかというと、インデックスの配列では、PHPコードと殆ど同じような形で変数を出力できましたが、添え字を使った場合はちょっと違います。上記の例からだとこんな感じになります。
{$test_array2.number}<br />
{$test_array2.name}<br />
{$test_array2.adress}<br />
.(ドット)でもって変数名と添え字を定義します。

 ここまでがSmartyの最も簡単で基本的な使い方です。Smartyの標準変数(のようなもの)を使わずともここまでの方法でもかなり便利です。

まとめ

  • Smarty を使用する際には、/usr/lib/Smarty/libsや/usr/local/lib/Smarty/libsなどのSmartyクラスへのパスを必ず定義しておくこと。(例)define('SMARTY_DIR', '/usr/local/lib/Smarty/libs/');
  • (例)require_once(SMARTY_DIR . 'Smarty.class.php');というようにSmartyを使用するPHPスクリプトの冒頭辺りでクラスファイルを呼び出すこと。
  • Smartyインスタンスを作成すること。(例)$smarty = new Smarty();
  • 最低でもSmartyに使用する4つのディレクトリを作成すること。この時コンパイルに使用するディレクトリ($smarty->compile_dir  = '../smarty/templates_c/';)は必ずパーミッション777に設定すること。
  • スカラー変数のassign方法は、$smarty->assign("<変数名>", "<値>");で定義すること。
  • インデックスの配列のassign方法は、$smarty->assign("<変数名>", <配列変数>);または、$smarty->assign("<変数名>", "array(...)");で定義すること。
  • 連想配列のassign方法は、インデックスの配列と同様に$smarty->assign("<変数名>", <配列変数>);または、$smarty->assign("<変数名>", "array(...)");で定義すること。
  • スカラー変数のテンプレート内の変数は、{$< 変数名>}。
  • インデックスのある配列変数のテンプレート内変数は、{$<変数名 [0]>}というように書くこと。
  • 連想配列のテンプレート内変数は、{$<変数名>.<添え字>}というように書くこと。







プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer