投稿者: mystral-kk 2009年1月18日(日) 10:08 JST
Geeklog.jpの掲示板のこのスレッド[*1] から始まったmore_article_linksカスタム関数[*2] だが、実装している最中に考えたことを参考までに記す。
上記のどちらかの処理を行ってから、該当するテンプレートファイルにテンプレート変数をセットするプレースホルダ{var_name}を追加する、という手段をとる。2. の場合にWikiに紹介されていた方法[*3] を取ると、複数の $template->set_var('foo', 'bar');
を追加することになり、美しくない。それより CUSTOM_templateSetVars() の手法をまねて、Templateクラスのインスタンスへのリファレンスを引数にしてカスタム関数に渡し、カスタム関数内で必要なテンプレート変数をセットするようにすれば、レンダリングを担当しているスクリプトに追加するのは1行で済む。article.phpの例を示すと、
$story_template->set_var('story_id', $story->getSid());
$story_template->set_var('story_title', $pagetitle);
CUSTOM_more_article_links($story_template, $story->getSid());
$story_options = array ();
現在の記事の前後の記事へのリンクを追加するには記事IDが必要になるので、CUSTOM_more_article_links()関数の第2引数に持たせている。この関数の宣言は次の通り:
function CUSTOM_more_article_links(&$template, $sid) {
クラスインスタンスを参照渡しにするために、第1引数の前に & をつけている。PHP5の場合、クラスインスタンスは自動的に参照渡しになるはずだが、PHP4の環境もまだ残っているので、安全性重視。
上記の方法でテンプレート変数を追加すれば、本体スクリプトの修正が最小限で済むので、標準になればよいのにと思う。
コメント (0件)