Xslateのテンプレート内でperlの関数を実行する方法
DBからのデータをリストにしてテンプレートで表示させたいときに
テンプレートに<p><: $oppai :><p>
とか繰り返し書いてたら面倒くさい
forとかで要素自動生成したいと思ったら、
Text::Xslate::Syntax::Kolonに、そんな機能があったから使ったからメモ
まずController側のコードを見る
#lib/Oppai/Controller/Content/Momitai.pm packege Oppai::Controller::Content::Momitai -----some codes----- sub tits :Local { my($self, $c) = @_; my @rows = $teng->search('検索したいテーブル名'{ #where条件(複数指定可能) id => {">=", 0}, #idが0以上 sex => 'female' #性別が女性 }, #その他Attribute {order_by => 'date'}, #投稿日順(昇順)に {limit => '9'} #9行までrowを取得する ); #tits.txに配列リファレンスを渡す $c->stash->{momitai_list} = \@rows; $c->forward( $c->view('Xslate') ); }
説明
- stashに配列リファレンスを渡す事が出来る
- $tengのTengインスタンスは,よしなに実装して取得して下さい
テンプレート側
<!--root/content/momitai/tits.tx--> <!DOCTYPE html> <html> <meta charset="UTF-8"> <head> <title>momitai_list</title> </head> <body> :for $momitai_list -> $momitai { <p><: $momitai.date :> <: $momitai.subtitle :></p> :} </body> </html>
説明
- 以下の箇所でstashに渡された配列をforで回してテーブルのrowの数だけ要素を生成している
:for $momitai_list -> $momitai { <p><: $momitai.date :> <: $momitai.subtitle :></p> :}
- row内のカラムにはドットで参照できる($momitai.sex)とか
まとめ
- 本当はここでは無く、Tengのsearch関数の引数を理解してなくてハマってた
- 便利ですね