ホーム > CakePHP | IT | Smarty > CakePHP1.3にSmartyを導入

CakePHP1.3にSmartyを導入

この記事の所要時間: 25
いい加減、CakePHP(1.3)にもSmartyを導入することにしました。

 ダウンロード

今回、利用したのはbasukeさんのCakeSmarty

※他のも色々あったのですが、CakePHP1.3で動くのが特に見当たりませんでした。

まず、ソースをダウンロード

ダウンロードしたら以下のようにplugins配下に設置します。

  • app/plugins/
    • smarty/
      • verndors/(この配下にはSmarty-0.37あり)
      • views/

 初期設定とサンプル作成

 コントローラー

利用するコントローラーに以下を記述します。

public $view = 'Smarty.Smarty';

※全体で反映させるならば、AppControllerに記述するだけでOKです。

 ビュー

htmlファイルを用意して記述すればOKです。
このCakeSmartyが素晴らしい点は、ctpファイルがあればそれが優先して読み込まれる点でしょう。

さて、Smartyの導入でどれぐらいシンプルになったか。
今まで。

 <?php if(!empty($data['book']['img']))
 {
  echo "<img src={$data['book']['img']}>";
 }
 ?>

Smarty導入後。

  {if $data['book']['img']}
      {image src=$data['book']['img']}
  {/if}

分かっていたこととはいえ、今までなんで導入しなかったのか。

 コマンド周り

上記にあるimage以外の他のコマンド周りについて詳しく知りたければ、以下の場所にあるphpファイルを見れば分かります。

  • app/plugins/
    • smarty/
      • views/

このエントリーをはてなブックマークに追加
はてなブックマーク - CakePHP1.3にSmartyを導入
Share on FriendFeed
Share on GREE

No related posts.

コメント:7

Yuichi 2011年10月10日

はじめまして、

こちらでcakephp 1.3.12にSmarty 3.1.3を利用しようとしてるのですが、書いてある通りにやりましたら、このテキストしかひょうじされません。

Html->charset(); ?> Html->meta(‘icon’); echo $this->Html->css(‘cake.generic’); echo $scripts_for_layout; ?>
Html->link(__(‘CakePHP: the rapid development php framework’, true), ‘http://cakephp.org’); ?>
Session->flash(); ?>
Html->link( $this->Html->image(‘cake.power.gif’, array(‘alt’=> __(‘CakePHP: the rapid development php framework’, true), ‘border’ => ’0′)), ‘http://www.cakephp.org/’, array(‘target’ => ‘_blank’, ‘escape’ => false) ); ?>
element(‘sql_dump’); ?>

そちらのほうで、ちゃんと動きました?

よろしくお願いします。

とし 2011年10月11日

smartyの表記にする必要があるので、上記のままでは表示されなくて書き換えが必要になってしまいますね。

例えば、element(‘sql_dump’)などのようにelementを使う場合は、{element name=”sql_dump”}などのようにする必要があります。

aタグであれば、{link href=”"}サンプル{/link}などのようにする必要があります。

タケパン 2012年2月4日

こんばんは、はじめまして。

私はサニタイズの処理を入れようとしてコントローラーにSanitizeをインポートして
下記のようにデータを吐き出したところ、何も表示されませんでした。
サニタイズを通さなければ文字列は表示?(これだとアラートが表示されてしまいます)
App::import(‘Sanitize’);

$data = “alert(‘hogehoge’);”;
$data = Sanitize::stripAll($data);
$this->set(“data”, $data);

テンプレートをindex.htmlを辞めてindex.ctpでやっても同じ動作でした。

何か対処方法があるのでしょうか。ご教示願います。

環境:
linux CentOS 6.0
CakePHP ver.1.3.14.

タケパン 2012年2月4日

度々、申し訳ございません。
上記の書き込みは自己解決しました。
プラグインの問題ではなくてCakePHPの使いかたでしたね・・。

Sanitize::stripAll(テキスト) :
、、、空白文字(改行・タブなど)を除去

という意味を理解してませんでした。ただ、スクリプトタグのみ消えるのかどうか・・・という
ところはすべて表示しないようになっているので腑に落ちないですが、Sanitize::htmlで
問題なく動作したので良いとします。

以前、研修で同じバージョンのCakePHPではちゃんと動作したような覚えがあったので
うる覚えかもしれませんが勘違いしてました。

大変、ご迷惑おかけしました。

とし 2012年2月5日

解決したようで何よりです。

ちなみに、上記の$data = “alert(‘hogehoge’);”;だとサニタイズで除去するのは特にないですね。
$data = “alert(‘hogehoge’);”;とかですかね。

ガラ 2012年3月13日

はじめまして、
このプラグインを使っているのですが、別のプラグインを導入した時にコンパイルエラーが出ます
そちらでは、如何でしょうか。
実際には、upload_packを導入したのですが、{$upload->image(…)}するとエラーが出ます。{$this->upload->image(…)}でもダメでした。いろいろ試行錯誤したのですがダメでした。何か解決策があればご教授願えませんでしょうか。
エラー表示
Fatal error: Uncaught exception ‘SmartyCompilerException’ with message ‘Syntax Error in template…..
本家の方にも同じ内容で投稿させていただいています。

とし 2012年3月15日

upload_packは実際に使ってないので、正確なことはいえませんが。
文法エラーのようですから、$upload->image(…)の()内の書き方に問題があるのかもしれません。

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://pplace.jp/2011/10/376/trackback/
トラックバックの送信元リスト
CakePHP1.3にSmartyを導入 - PPl@ce より

ホーム > CakePHP | IT | Smarty > CakePHP1.3にSmartyを導入

検索
フィード
メタ情報
オススメ本

つぶやき
PV
43169
ランキング

人気ブログランキングへ
ブログランキング・にほんブログ村へ
にほんブログ村

ページの上部に戻る