ブログの本文でリンクを書いたりするのに、わざわざタグを記述するのは面倒なので、巷で流行り(?)のMarkdown記法が使えるようにしました。
↓加筆修正(2012/12/4)
例えばよくあるブログシステムの記事部分みたいに、同じテンプレを多くのページで利用し、各ページの一部分の内容を管理画面から編集させるような場合に、そのページ内容の編集画面でリンクなどのタグをわざわざ記述するのは、とても面倒です。
そこでここでは、FuelPHPにおいて、巷で流行り(?)のMarkdown記法を、smartyテンプレ内で部分的に使う方法を探ってみました。
…といっても、調べてみたらMarkdownクラスが既にあるので、それを利用します。
流れとしては、(DBから本文データを取得 →) Markdown::parse() → Viewに渡す → html_entity_decode で実体参照をデコードして画面表示(smarty)、という感じ。
つまり、
Controller側:
$data['str'] = Markdown::parse($str);
...
return Response::forge(View_Smarty::forge('hogehoge.tpl', $data));
↓
View側(smarty)の表示させたいところで:
{$str|html_entity_decode}
だけで、OK。
…なんと、簡単なんだ。(FuelPHP…恐ろしいk
ちなみに、記事作成の時にMarkdown記法での入力を楽にする方は、このへんを使うと出来そうだけど、それはおいおい…
References:
- Markdown - Classes - FuelPHP Documentation
- htmlspecialchars_decodeはやめて、html_entity_decodeで実態参照をデコード - ぬるま湯に浸かりながら
追記(2012/12/4):
( thanks ワテさん @aWebprogrammer )
Twitter の方で、「View_Smarty じゃなくて View_Markdown もあるよ」との反応を頂きました。
今回、Markdown → smarty なんてやり方をしているのは、まさに指摘通りで、
- テンプレ(View)は、デザイナがsmartyを使ったりだったり、htmlだったりで作成
- 開発者が、1. のテンプレにシステムからの動的な値を当て込む(ここで、smarty化)
- 同一テンプレの各ページで一部分を、(html?なにそれ?な)一般ユーザが、管理画面的なところから編集する(Markdown)
というフローを暗黙に想定しているからです。
ちなみに、View が Markdown で書かれていれば(デフォルトは *.md)、Controller で、
return Response::forge(View_Markdown::forge('hoge.md'));
とすれば、OKです。
追記(2012/12/5):
『はじめてのフレームワークとしてのFuelPHP』でおなじみの鈴木憲治氏 @kenji_s
から「エンコードして、後でhtml_entity_decodeするとかわけわからん」と暖かい(!)反応を頂きました。
まさにその通りで、そうならないためには、fuel/app/config/parser.php で、
'View_Smarty' => array(
...
'auto_encode' => false,
とすれば、View では、
{$str}
で済みます。