Smarty のライブラリファイルを、ディストリビューションの
/libs/
サブディレクトリにインストールしてください。
これらの .php
を編集してはいけません。
これらはすべてのアプリケーションで共有するものであり、
Smarty を新しいバージョンにアップグレードする際にのみ更新します。
以下の例で、Smarty の tarball の展開先は次のようになります。
*nix の場合は
/usr/local/lib/Smarty-v.e.r/
Windows 環境の場合は
c:\webroot\libs\Smarty-v.e.r\
Example 2.1. 必要な Smarty ライブラリファイル群
Smarty-v.e.r/ libs/ Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl internals/*.php (これら全て) plugins/*.php (これら全て)
Smarty は、SMARTY_DIR
という名前の PHP の 定数
を使用します。これは、Smarty の libs/
ディレクトリへの
絶対パス を表します。
基本的にあなたのアプリケーションが Smarty.class.php
ファイルを見つける事が出来るなら
SMARTY_DIR
を定義する必要はありません。Smarty は自分でそれを考えます。
したがって、もし Smarty.class.php
が
include_path
にないか、あなたのアプリケーションにてそれらへの絶対パスが指定されていないなら、
手動で SMARTY_DIR
を定義する必要があります。
SMARTY_DIR
は、
最後にスラッシュ / を含めなければなりません。
次の例では、PHP スクリプト内での Smarty インスタンスの作成方法を示します。
<?php // 注: Smarty の 'S' は大文字です require_once('Smarty.class.php'); $smarty = new Smarty(); ?>
上のスクリプトを実行してみてください。
Smarty.class.php
ファイルが見つからないというエラーが出た場合は、
以下のいずれかを行う必要があります。
Example 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(); ?>
Example 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(); ?>
Example 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\"
Example 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 は、デフォルトで
templates/
、
templates_c/
、configs/
および cache/
と名づけられた4つのディレクトリが必要です。
これらの名前は、それぞれ
Smarty クラスのプロパティ
$template_dir
、
$compile_dir
、
$config_dir
および
$cache_dir
で定義することができます。
Smarty を使用する各アプリケーションにおいて、 これらのディレクトリを個別に設置する事を強く推奨します。
インストール例として、ゲストブックアプリケーションの
Smarty 環境をセットアップしてみます。
私達はディレクトリの命名規約の目的についてのみ取り上げました。
例のアプリケーション名を guestbook/
からあなたのアプリケーション名に置き換えれば、同様の環境を使用できます。
Example 2.6. ファイル構造
/usr/local/lib/Smarty-v.e.r/libs/ Smarty.class.php Smarty_Compiler.class.php Config_File.class.php debug.tpl internals/*.php plugins/*.php /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
ファイルを見ればユーザ名とグループ名がわかります。
Example 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
の中に配置しなければなりません。
Example 2.8. /web/www.example.com/guestbook/templates/index.tpl
{* Smarty *} こんにちは、{$name}。ようこそ Smarty へ!
{* Smarty *}
はテンプレートの
コメント です。
これは必須ではありませんが、全てのテンプレートファイルのはじめに
コメントを書くのは良い習慣です。
これは、ファイルの拡張子に関わらずファイルを認識する事を簡単にします。
例えば、テキストエディタはファイルを認識して特有のシンタックスハイライトを有効にするでしょう。
では、index.php
を編集しましょう。
Smarty のインスタンスを作成し、テンプレート変数を割り当て
(assign()
)、
index.tpl
ファイルを表示
(display()
)
します。
Example 2.9. /web/www.example.com/docs/guestbook/index.php の編集
<?php require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = '/web/www.example.com/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/guestbook/configs/'; $smarty->cache_dir = '/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 の基本的なセットアップは完了しました!