p_chinのおっぱいブログ

UnityとPerlなど

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関数の引数を理解してなくてハマってた
  • 便利ですね