見出し画像

Smarty 3を覚える本【前編】[note版]

※本文のサンプルプログラムは以下バージョンにおいて動作確認済みです。
PHP:PHP 5.4.16
Smarty:Smarty 3.1.18
OS:Windows 7 professional

第一章 Smarty

SmartyとはPHPのテンプレートエンジンです。この仕組みによりPHPのWebアプリケーションの中のデザインに関する部分を分離し、作業の分担が容易になる、といったものです。
当コンテンツでは、Smartyの設定の仕方、記述方法等について説明していきたいと思います。

第二章 XAMPP

まずSmartyを使う準備をします。Smartyを動かすサーバーをローカルのマシンに構築する為XAMPPというアプリケーションをインストールし、そこでSmartyを動かします。
 XAMPPの必要ファイルとSmarty本体をそれぞれ以下URLのダウンロードリンクよりダウンロードします。

XAMPP
https://www.apachefriends.org/download.html

Smarty
http://www.smarty.net/download

 最初にXAMPPのインストールをします。インストールと言ってもダウンロードしたインストーラをクリックして行けば簡単にできます。
そしてインストールが完了したらhttp://localhost/にアクセスしましょう。こんな画面が立ち上がるはずです。

 http://localhost/にアクセスしたはずなのにhttp://localhost/xampp/に転送されてしまうのはhttp://localhost/index.phpにそうするように記述してあるからであり、必要に応じて書き換えればいいです。今回はそれには特に触れず、まずドキュメントルート直下にsmフォルダを作ります。Smartyのsmって意味で。

 ちなみにそのindex.phpにはこんな記述があります。

<?php
	if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
  $uri = 'https://';
	} else {
  $uri = 'http://';
	}
	$uri .= $_SERVER['HTTP_HOST'];
	header('Location: '.$uri.'/xampp/');
	exit;

 さて、smフォルダ直下にtest.phpというファイルを作成し、表示テスト的なものをやってみましょう。
[sm/test.php]

<?php
echo "hello";

helloと表示されれば成功です。

 で、本題のSmartyですがダウンロードしてきたファイルは次のようなファイル、今回はバージョンSmarty 3.1.18を持ってきました。

 これを解凍すると中には、libsとかdemoとかいろいろ入っています。ここではlibsをsmフォルダ以下にコピーして下さい。

第三章 Smartyの基本 


 続いて同じsmフォルダ直下に、

template
template_c
cache
configs

というフォルダを手動で作成して下さい。
 最初にSmartyで変数の値を表示するプログラムを書いてみましょう。
 まずvar.phpというファイルを作成します。ここでは深く考えず次のように書いて下さい。
◆[sm/var.php]

<?php
require_once('./libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = './templates/';
$smarty->compile_dir  = './templates_c/';
$smarty->config_dir   = './configs/';
$smarty->cache_dir    = './cache/';
$smarty->assign('name','Taro');
$smarty->display('var.tpl');

 そして先ほど作成したtemplateフォルダに、今度はvar.tplというファイルを作成します。

◆[sm/templates\var.tpl]

{$name}

そして、http://localhost/sm/var.phpにブラウザでアクセスしてみるとこんな画面になりますね。

これは何をやっているかというと、var.phpの中で次のような動作を発生させています。

$smarty = new Smarty();→Smartyのインスタンスを生成
$smarty->template_dir = './templates/'; →テンプレートファイルを配置するディレクトリを設定
$smarty->compile_dir = './templates_c/';→テンプレートファイルがphpファイルに変換されたファイルが格納されるディレクトリを設定
$smarty->config_dir = './configs/';→コンフィグファイルを配置
$smarty->cache_dir = './cache/';→キャッシュの格納場所を設定
$smarty->assign('name','Taro');→テンプレートに変数を入れる
$smarty->display('var.tpl');→使用するテンプレートを設定

 ここで重要なのはメソッドassignでnameという変数にTaroという値を代入、テンプテートにあてがうとこです。assignの第一変数に変数名、第二変数にその値を入れるのが基本。そして実際にテンプテート内で使用するときは{$name}という表記で$記号を頭に付け、カッコ({とか}のカッコ)で括ります。
 変数の割り当て方法は基本的にたったそれだけのことなわけですが、これが配列だったらどうするのか?次の例を見てみましょう。

◆[sm/array.php]

<?php
require_once('./libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->setTemplateDir('./templates/');
$smarty->setCompileDir('./templates_c/');
$smarty->setConfigDir('./configs/');
$smarty->setCacheDir('./cache/');
$array1[] = 'Tokyo';
$array1[] = 'Osaka';
$array1[] = 'Nagoya';
$smarty->assign('pref',$array1);
$array2['height'] = '170px';
$array2['width'] = '200px';
$smarty->assign('size',$array2);
$smarty->display('array.tpl');

◆[sm/templates/array.tpl]

array1.0 : {$pref.0}
<br>
array1.1 : {$pref.1}
<br>
array1.2 : {$pref.2}
<br>
<br>
array1[0] : {$pref[0]}
<br>
array1[1] : {$pref[1]}
<br>
array1[2] : {$pref[2]}
<br>
<br>
array2.height : {$size.height}
<br>
array2.width : {$size.width}
<br>
<br>
array2['height'] : {$size['height']}
<br>
array2['width'] : {$size['width']}
<br>

実行した結果は次のキャプチャ画像のようになります。

 配列といっても実際は通常の文字列などを表示するプロセスとは特に変わりはないわけですが、一応処理の流れを見てみましょう。
 まずarray.phpの中で配列を定義、いろいろ要素をつっこんでいきます。そしてその定義された配列、$array1と$array2をassignでテンプレートに$pref、$sizeとして割り当てる。そこまでは特に何も考えなくていいわけですが、テンプレートの中でのアクセスの仕方が重要になります。プログラム中では、配列のキーにアクセスする方法として、$pref.0、$pref.1など.(ドット)を使用することで配列の要素にアクセスします。形式としては、
{配列.キー}
という形です。キーはプログラムを見てもわかるように文字列であっても使用可能で、連想配列でも同じアクセス方法がつかえます。もちろん通常のPHPのように、
{配列[キー]}という[]カッコを使用した形式も使用可能、カッコ内のキーはやはり数字のインデックスも文字列のキーも使用可能です。
 同じような例としてオブジェクトをテンプレートにあてがうこともできたりします。次のサンプルを見て下さい。
◆[sm/obj.php]

ここから先は

38,554字 / 43画像

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?