T7 - テンプレート

Maharaでのテンプレートエンジンの使い方について紹介し、このチュートリアルを終わりにしたい。

テンプレートエンジンとは、動的にHTMLページを生成するときに、テンプレートとなるHTMLファイルを作成しておき、データを処理するプログラムは新しいページ用に作ったデータをテンプレートに統合して、最終的なHTMLファイルを生成するものだ。単に変数をテンプレートに埋め込めるだけではなく、条件分岐やループをつかった表の扱いなど様々な機能を実装している。

MaharaではDwoo ( http://dwoo.org ) というテンプレートエンジンを使っている。ブロックタイプのプラグインでも、Dwooを使うことができる。むしろ、使うことが推奨されている。テンプレートを使うことで、ロジックと外観を分離できるからである。

テンプレートファイルの用意

以下のような内容のファイルを theme/raw/simpleclock.tpl という名前で作成する。

<div style="background-color: #ffa; padding: 50px; margin: 5px;">
 {$date}<br /><br />
 {$access}
</div>

これがテンプレートファイルだ。これまで書いてきたPHPのスクリプトではなく、HTMLファイルとほとんど同じということに注意してほしい。

ブロックの描画の際にこのテンプレートが呼び出されるが、その際 {$date} と {$access} にどのような値を当てはめるかという指定がなされている。指定された値を当てはめ、HTMLファイルを吐き出すのが Dwooの役割。

render_instance の変更

lib.php で定義されている render_instance を修正する。

現在は以下のようになっている。

       $result = get_string('clockstring','blocktype.simpleclock',date($datestring));

       if ( $count == 1 ) {
           $result .= '<br>'.get_string('firstvisit','blocktype.simpleclock');
       } else {
           $result .= '<br>'.get_string('notfirstvisit','blocktype.simpleclock',$lastvisit);
       }

       return $result;

$result という変数に、HTMLのコードを直接保存して、メソッドの最後のところで return $result としてそれを返している。

この部分を以下のように変更しよう。

       $smarty = smarty_core();
       $smarty->assign('date', get_string('clockstring','blocktype.simpleclock',date($datestring)) );

       if ( $count == 1 ) {
           $smarty->assign('access', get_string('firstvisit','blocktype.simpleclock') );
       } else {
           $smarty->assign('access', get_string('notfirstvisit','blocktype.simpleclock',$lastvisit) );
       }

       return $smarty->fetch('blocktype:simpleclock:simpleclock.tpl');

smarty_core() という関数で Dwooのオブジェクトを作成する。そのオブジェクトに対して変数の名前と内容をassign (assign メソッドを呼び出す)していく。元のコードと比較しながら見てほしい。

最終的には、テンプレートファイルを指定してfetchメソッドを呼び出すと、指定したテンプレートに変数の値を当てはめた状態のHTMLファイルが戻ってくる。それを render_instance の戻り値にするわけだ。

以下のような表示になる。

maharapg-t7-20170904-061516.png

最終的なファイル;filesimpleclock-v2-t7.zip


添付ファイル: filesimpleclock-v2-t7.zip 3件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-04 (月) 23:33:46 (19d)