Smarty の導入

Smarty の導入

テンプレートエンジンSmartyを導入する

ここ2年ほどは、ほとんどこのSmartyというテンプレートエンジンを用いたシステム開発を行っています。最大の魅力はPHPで書くロジックの部分とHTML&CSSで表現するデザインの部分が分離して表現できるというポイントがあげられます。また、Smartyにはキャッシュ機能があるので、比較的アクセスが多いサイトでもPHPやSQLの処理を毎回行なわなくても良いページの場合には、表示速度のアップ、サーバーの負荷軽減にも、Smarty導入は、効果を発揮します。

webデザインのHTMLは、Smartyのテンプレートファイルに分離して作成しますが、HTMLの記述にSmartyテンプレートタグ {} を記入してデータを記述するので、データを配列などでphpからテンプレートファイルに渡してテーブルタグの中をループでまわして一覧表の作成など非常に威力を発揮します。

Smartyは導入も簡単で、日本語マニュアルもオンラインで閲覧できます。

Smarty導入手順

  1. Smartyのダウンロードとサーバーへアップロード
  2. 必要なフォルダの作成
  3. 設定ファイルの作成
  1. Smartyのダウンロードとサーバーへアップロード
    Smartyのサイトhttp://www.smarty.net/から「Download!」のリンクをたどり、Latestバージョンをダウンロードします。
    本ドキュメント作成時は「Smarty 2.6.19」をダウンロードしました。
    解凍すると、中に「libs」フォルダがありますので、それをサーバーにアップロードします。
  2. Smartyに必要なフォルダの作成
    Smartyには、先ほどアップロードしたライブラリフォルダの他に、テンプレートフォルダとコンパイルフォルダと設定フォルダとキヤッシュフォルダが必要です。デフォルトではそれぞれ、templatestemplates_cconfigscache のフォルダ名になっていますのでそれぞれのフォルダを作成します。
    コンパイルフォルダとキヤッシュフォルダは、webサーバーが書き込みできなければならないので、書き込み権限を与えておきましょう。
  3. Smarty環境初期化ファイルの作成
    次のような内容で、Setup.phpファイルを作成します。
    			<?php
    	//キャッシュidはファイル名毎
    	$my_cache_id = $acss_file;
    	// Smartyライブラリを読み込む
    	//define('SMARTY_DIR', '/home/guestbook/Smarty/libs/');
    	require(SMARTY_DIR . 'Smarty.class.php');
    	// setup.phpはアプリケーションに必要なライブラリファイルを
    	// 読み込むのに適した場所です。例:
    	// require('guestbook/guestbook.lib.php');
    	class Smarty_guestbook extends Smarty {
    	   function Smarty_guestbook() 
    	   {
    	   
    	        // クラスのコンストラクタ。これらは新しいインスタンスで自動的にセットされます。
    	        $this->Smarty();
    	        $this->template_dir = '/home/guestbook/public_html/s_template/';
    	        $this->compile_dir = '/home/guestbook/Smarty_tpl/templates_c/';
    	        $this->config_dir = '/home/guestbook/Smarty_tpl/configs/';
    	        $this->cache_dir = '/home/guestbook/Smarty_tpl/cache/';
    	             
    	   }
    	}
    	?> 
    	
     このファイルをSmartyを利用する、PHPファイルの先頭でrequierすれば、それぞれの環境を意識しないでプログラムをコーディングることができます。
Smarty は PHP のためのテンプレートエンジンです。具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。...つまりデザインとロジックが切り離せるかも?って感じです。