CakePHP

CakePHPのViewテンプレートはPHPのコードが思いっきり入っていてちょっとテンションが下がる。
そこでCakePHPでSmartyを使う方法を調べた。

以下の環境で実施した。

  • CakePHP 2.4.3
  • Smarty 3.1.16

Smartyライブラリのインストール

  • Smartyのサイトからダウンロードして解凍する。
  • 中にあるlibsディレクトリの名前をsmartyに変更。
  • cakephpディレクトリのvendorsディレクトリに入れる。

Smartyが使用するディレクトリの準備

  • テンプレートのキャッシュを格納するディレクトリを作成。
    • cakephpのapp/tmp/smarty/compile

Smarty View Classのインストール

ただし、そのままだとエラーが発生した。

// $this->Smarty->plugins_dir[] = VENDORS.DS.'smarty'.DS.'plugins';   // こっちはエラーになってた
   $this->Smarty->setPluginsDir(VENDORS.DS.'smarty'.DS.'plugins');    // たぶんこっちが正解。

default.tplの配置

  • app/View/Layouts/default.ctp をSmarty記法にしたdefault.tplを作成する。

使ってみる

  • Controllerのフィールド $viewClassにSmartyを指定。
  • Viewファイルの拡張子は.tplで保存。
  • あとは通常の記述方法。
    • ModelとControllerはCakePHPのルール。
    • ViewはSmartyのルール
    • Viewを完全にSmartyでやるときは $layout = null; とする。
      • $layout を使うこともできる。
<?php
	class MemberController extends AppController {
		public $name = 'Member';
		public $uses = array('Member');
		public $layout = null;
		public $viewClass = 'Smarty';
	
		function showList(){
			$memberList = $this->Member->find('all');
			$this->set('memberList',$memberList);
			$this->set('memberListCount',count($memberList));
		}
	}
?>
{if empty($memberList)}
	表示すべき情報はありません
{else}
	{$memberListCount}件ありました
	{foreach from=$memberList item="member"}
		{$member.Member.id}
		{$member.Member.mb_name_last}&nbsp;{$member.Member.mb_name_first}
		{$member.Member.mb_mail}
	{/foreach}
{/if}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-12-22 (日) 01:19:28 (1587d)