[[CakePHP]]
#setlinebreak(on)

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

以下の環境で実施した。
- CakePHP 2.4.3
- Smarty 3.1.16

** Smartyライブラリのインストール [#ccd3d4e7]
- Smartyのサイトからダウンロードして解凍する。
- 中にあるlibsディレクトリの名前をsmartyに変更。
- cakephpディレクトリのvendorsディレクトリに入れる。

** Smartyが使用するディレクトリの準備 [#va246316]
- テンプレートのキャッシュを格納するディレクトリを作成。
-- cakephpのapp/tmp/smarty/compile

** Smarty View Classのインストール [#x3154a13]
- SmartyView.phpファイルを入手し、cakephpのapp/viewの直下に配置する。
-- https://github.com/architshin/histudy7
-- /cakesmarty/app/View/SmartyView.php

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


** default.tplの配置 [#p74fc6a1]
- app/View/Layouts/default.ctp をSmarty記法にしたdefault.tplを作成する。

** 使ってみる [#bbcda520]
- 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