今さらSmartyの入門vol.3~サブクラスの作成~

Smartyを使用する場合、Smartyクラスを継承して必要なプロパティ値を設定したサブクラスを作成しておく場合が多い。

アプリケーション内の各スクリプトから必要なプロパティが設定されたサブクラスを呼び出すことで、サブクラスで一元的に管理が可能になる。

派生クラスの作成

前回の「今さらSmartyの入門vol.2~Hello Worldを表示~」で作成したphpファイルで、今後共通すると思われる部分を抜き出し、「MySmarty.class.php」として派生クラスを作る。

格納ディレクトリ:/htdocs/直下
ファイル名:MySmarty.class.php

<?php
// エラーを画面に出力
ini_set('display_errors', 1);
// 文字コード
header("Content-Type: text/html; charset=UTF-8");

// ルートディレクトリを設定
define("_ROOT_DIR", __DIR__ . "/");
// 関連ファイルを設置するディレクトリ
define("_PHP_LIBS_DIR", _ROOT_DIR . "../php_libs/");

// クラスファイルを設置するディレクトリ
define("_CLASS_DIR", _PHP_LIBS_DIR . "class/");

// Smartyのlibsディレクトリ
define("_SMARTY_LIBS_DIR", _PHP_LIBS_DIR . "smarty/libs/");

// Smarty本体を設置するディレクトリ
define("_SMARTY_DIR", _ROOT_DIR . "../../frameworks/smarty/libs/");

// Smartyのテンプレートファイルを保存したディレクトリ
define("_SMARTY_TEMPLATES_DIR",   _PHP_LIBS_DIR . "smarty/templates/");
define("_SMARTY_TEMPLATES_C_DIR", _PHP_LIBS_DIR . "smarty/templates_c/");
define("_SMARTY_CONFIG_DIR",      _PHP_LIBS_DIR . "smarty/configs/");
define("_SMARTY_CACHE_DIR",       _PHP_LIBS_DIR . "smarty/cache/");

require_once (_SMARTY_DIR . "Smarty.class.php");

class MySmarty extends Smarty {

  // コンストラクタで必要なプロパティを設定
  public function __construct() {
    parent::__construct();

    $this->template_dir = _SMARTY_TEMPLATES_DIR;
    $this->compile_dir = _SMARTY_TEMPLATES_C_DIR;
    $this->config_dir = _SMARTY_CONFIG_DIR;
    $this->cache_dir = _SMARTY_CACHE_DIR;
  }

}

派生クラスの読み込み

「MySmarty.class.php」を読み込む。

前回、「hello.php」を作成したので、今回は「hello_sub.php」というファイル名で作成。

格納ディレクトリ:/htdocs/直下
ファイル名:hello_sub.php

<?php
// Smarty派生クラスを読み込む
require_once("./MySmarty.class.php");

// 派生クラスMySmartyをインスタンス化
$o_smarty = new MySmarty();
// テンプレート変数をセット
$o_smarty->assign("testvar", "world");
// テンプレートの呼び出し
// 前回と同じテンプレートを使用
$o_smarty->display("hello.tpl");

これで「hello_sub.php」にアクセスすると前回同様「Hello world!」と表示されるはず。

データベースへの接続など、今後アプリケーションを開発していく上で共通して利用するリソースをここに追加していく。

こうして共通部分を一元化して管理することで、設定に変更が生じた場合の影響範囲を限定し、修正漏れや修正誤りを防ぐ。

php TIPS の一覧