11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FuelPHPでMarkdown記法を使う。(表示編)

Last updated at Posted at 2012-12-04

ブログの本文でリンクを書いたりするのに、わざわざタグを記述するのは面倒なので、巷で流行り(?)の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:


追記(2012/12/4):

( thanks ワテさん @aWebprogrammer )

Twitter の方で、「View_Smarty じゃなくて View_Markdown もあるよ」との反応を頂きました。
今回、Markdown → smarty なんてやり方をしているのは、まさに指摘通りで、

  1. テンプレ(View)は、デザイナがsmartyを使ったりだったり、htmlだったりで作成
  2. 開発者が、1. のテンプレにシステムからの動的な値を当て込む(ここで、smarty化)
  3. 同一テンプレの各ページで一部分を、(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}

で済みます。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?