cakePHP とsmartyを使い、html helperで日本語を使うためのメモ
苦労したので、次のためにメモ
初期
cakePHPとsmarty使う方法は
第11回 Smartyとフレームワーク(その1:CakePHP編) - Smarty講座
これ見ればいけるので、省略。
んで、このなかで巧く動かない部分があった。
以下のコードを先ほどのindex.tplに書いてみてください。 {$html->link('yossy先生のSmarty講座', 'http://www.phppro.jp/school/smarty/')} http://(ドメイン名)/test/index にアクセスしてみて、リンクは表示されたでしょうか?
「いいえ」
<a href="http://www.phppro.jp/school/smarty/"></a>
こんな感じで、リンク名が入らない
ちなみに、リンク名を英数字だけにすると
<a href="http://www.phppro.jp/school/smarty/">test</a>
入る。
原因は..
正直よくわからん。
cakeのversionかもしれないし、smartyのversionかもしれないし、レンサバのPHPのversionかもしれん。。
とりあえず日本語使えるようにしようと思って、試行錯誤。
日本語だけ動かないので、きっと日本語入れた場合に、へんなencoding処理とかしてるんだろうなと思い、cakeのhtml helperのソースを読みに行く
html_helper
ファイルは
- cake/libs/view/helpers/html.php
260行目
/** * Creates an HTML link. * ....... function link($title, $url = null, $options = array(), $confirmMessage = false) { $escapeTitle = true; if ($url !== null) { $url = $this->url($url); } else { $url = $this->url($title); $title = $url; $escapeTitle = false; } if (isset($options['escape'])) { $escapeTitle = $options['escape']; } if ($escapeTitle === true) { $title = h($title); } elseif (is_string($escapeTitle)) { $title = htmlentities($title, ENT_QUOTES, $escapeTitle); }
$escapeTitleっての怪しいな。
三つ目の引数の$options内に、"escape"を定義して渡してあげればいいのか。
渡した"escape"は$escapeTitleに入って、htmlentities関数の第三引数に読まれて、$titleに入る。
なんかあやしそうだから、$optionsに"escape"を定義してみる
htmlentitiesの第三引数はcharsetらしいので、"EUC-JP"を定義する
{$html->link('入口', 'http://hoge.com/pages/home', array('escape' => 'EUC-JP'))}
Fatal Error (256): Smarty error: [in /home/hogehogehoge/app/views/tops/index.tpl line 11]: syntax error: unrecognized tag: $html->link('yossy先生のSmarty講座', 'http://www.phppro.jp/school/smarty/', array('escape' => 'EUC-JP',)) (Smarty_Compiler.class.php, line 446) [APP/vendors/smarty/Smarty.class.php, line 1093]
なんかエラーでる。
今度はこのエラー調べる
CakePHP で Smarty を使用するメモ | Sun Limited Mt.
こちらのサイト様で
ただ、.thtml で HTMLヘルパーを使用している場合 {$html->input('Post/name', array('size'=>'30'))} のままでは、array(…) でエラーになる。
「はい。同じくarray(...)でエラーになります。。」
というわけで、解決方法として紹介されているpluginを導入してみる。
プラグインは↓
function.assign_assoc.php という名前で保存して、
/vendors/samrty/libs/plugins/
以下に保存。
今度はtpl内で
{assign_assoc var='ArrayName' value='escape=>EUC-JP'} {$html->link('yossy先生のSmarty講座', 'http://www.phppro.jp/school/smarty', $ArrayName)}
と記述すれば完成。
日本語のリンク名が出ましたよ。