基本的なインストール

Smarty のライブラリファイルを、ディストリビューションの /libs/ サブディレクトリにインストールしてください。 これらの .php を編集してはいけません。 これらはすべてのアプリケーションで共有するものであり、 Smarty を新しいバージョンにアップグレードする際にのみ更新します。

以下の例で、Smarty の tarball の展開先は次のようになります。

例 2.1. 必要な Smarty ライブラリファイル群


Smarty-v.e.r/
   libs/
      Smarty.class.php
      debug.tpl
      sysplugins/* (すべて)
      plugins/*    (すべて)

    

Smarty は、SMARTY_DIR という名前の PHP の 定数 を使用します。これは、Smarty の libs/ ディレクトリへの 絶対パス を表します。 基本的にあなたのアプリケーションが Smarty.class.php ファイルを見つける事が出来るなら SMARTY_DIR を定義する必要はありません。Smarty は自分でそれを考えます。 したがって、もし Smarty.class.phpinclude_path にないか、あなたのアプリケーションにてそれらへの絶対パスが指定されていないなら、 手動で SMARTY_DIR を定義する必要があります。 SMARTY_DIR は、 最後にスラッシュ / を含めなければなりません

次の例では、PHP スクリプト内での Smarty インスタンスの作成方法を示します。


<?php
// 注: Smarty の 'S' は大文字です
require_once('Smarty.class.php');
$smarty = new Smarty();
?>

    

上のスクリプトを実行してみてください。 Smarty.class.php ファイルが見つからないというエラーが出た場合は、 以下のいずれかを行う必要があります。

例 2.2. 手動で SMARTY_DIR 定数を定義する


<?php
// *nix スタイル (大文字の 'S' に注意)
define('SMARTY_DIR', '/usr/local/lib/Smarty-v.e.r/libs/');

// windows スタイル
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');

// *nixとwindowsで共通なハックバージョンの例
// Smarty は現在のスクリプトが 'includes/' ディレクトリの下にあると仮定します。
define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');

require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?>

    

例 2.3. ライブラリファイルの絶対パスを指定する


<?php
// *nix スタイル (大文字の 'S' に注意)
require_once('/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php');

// windows スタイル
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');

$smarty = new Smarty();
?>

    

例 2.4. php.ini ファイルにライブラリへのパスを追加する


;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; *nix: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"

; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"

例 2.5. PHP スクリプト内での ini_set() によるインクルードパスの追加


<?php
// *nix
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');

// windows
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
?>

    

これでライブラリファイルは正常に設置できたので、 今度はあなたのアプリケーション内に Smarty 用のディレクトリを セットアップしましょう。

インストール例として、ゲストブックアプリケーションの Smarty 環境をセットアップしてみます。 私達はディレクトリの命名規約の目的についてのみ取り上げました。 例のアプリケーション名を guestbook/ からあなたのアプリケーション名に置き換えれば、同様の環境を使用できます。

例 2.6. ファイル構造


/usr/local/lib/Smarty-v.e.r/libs/
        Smarty.class.php
        debug.tpl
        sysplugins/*
        plugins/*

/web/www.example.com/
        guestbook/
        templates/
            index.tpl
        templates_c/
        configs/
        cache/
        htdocs/
            index.php

    

あなたは web サーバのドキュメントルートの位置を知っている必要があります。 例ではドキュメントルートは /web/www.example.com/guestbook/htdocs/ とします。Smarty ディレクトリは Smarty ライブラリによってのみアクセスされ、 web ブラウザから直接アクセスされる事はありません。 したがってセキュリティの心配を避けるために、 これらのディレクトリをドキュメントルートの 外部 に配置する事を推奨します (ただし必須ではありません)。

ドキュメントルート下には最低1つのファイルが必要であり、 それは web ブラウザによってアクセスされるスクリプトです。 この例ではドキュメントルート /htdocs/ の下にサブディレクトリを作成し、その中に index.php を配置します。

Smarty は $compile_dir $cache_dir (templates_c/cache/) に 書き込み権限 でアクセスする必要があるので、 web サーバのユーザがこれらに書き込める必要があります (windows ユーザはこの話を無視してください)。

注意

通常は、このユーザは 「nobody」 でグループは 「nobody」 です。OS X ユーザの場合は、デフォルトのユーザは 「www」 でグループは 「www」 です。 もし Apache を使用しているなら、httpd.conf ファイルを見ればユーザ名とグループ名がわかります。

例 2.7. パーミッションおよびディレクトリへの書き込み権限の付与


chown nobody:nobody /web/www.example.com/guestbook/templates_c/
chmod 770 /web/www.example.com/guestbook/templates_c/

chown nobody:nobody /web/www.example.com/guestbook/cache/
chmod 770 /web/www.example.com/guestbook/cache/

    

注意

chmod 770 は強固なセキュリティです。 これは、ユーザ 「nobody」 とグループ 「nobody」 のみにディレクトリのリード/ライトアクセスを許可します。 もし誰にでもリードアクセスを可能にしたい場合 (大抵はあなた自身がファイルを見るための利便性から) は、代わりに 775 を使う事が出来ます。

次に、Smarty が表示するファイル index.tpl を作成する必要があります。これは、 $template_dir の中に配置しなければなりません。

例 2.8. /web/www.example.com/guestbook/templates/index.tpl


{* Smarty *}

こんにちは、{$name}。ようこそ Smarty へ!

    

テクニカルノート

{* Smarty *} はテンプレートの コメント です。 これは必須ではありませんが、全てのテンプレートファイルのはじめに コメントを書くのは良い習慣です。 これは、ファイルの拡張子に関わらずファイルを認識する事を簡単にします。 例えば、テキストエディタはファイルを認識して特有のシンタックスハイライトを有効にするでしょう。

では、index.php を編集しましょう。 Smarty のインスタンスを作成し、テンプレート変数を割り当て (assign())、 index.tpl ファイルを表示 (display()) します。

例 2.9. /web/www.example.com/docs/guestbook/index.php の編集


<?php

require_once(SMARTY_DIR . 'Smarty.class.php');

$smarty = new Smarty();

$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
$smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/');
$smarty->setConfigDir('/web/www.example.com/guestbook/configs/');
$smarty->setCacheDir('/web/www.example.com/guestbook/cache/');

$smarty->assign('name','Ned');

//** 次の行のコメントをはずすと、デバッギングコンソールを表示します
//$smarty->debugging = true;

$smarty->display('index.tpl');

?>

    

注意

この例では、Smartyのディレクトリすべてを絶対パスで設定しています。 もし /web/www.example.com/guestbook/ が PHP の include_path にあるのなら、これらの設定は必要ありません。 けれどもこれらを絶対パスで指定する方が より効率的で、(経験上)エラーが少なくなります。 そうすれば、Smarty はあなたが意図したディレクトリからファイルを確実に取得できます。

では、web ブラウザから index.php ファイルを読み込んでみましょう。 "こんにちは、Ned。ようこそ Smarty へ!" と表示されるはずです。

これで Smarty の基本的なセットアップは完了しました!