Tree::Simpleを使ってツリー表示を実装する(つもりだったけど)
久しぶりにBBSの続きを実装しようかと。ツリー表示をまだ実装していなかったので。
今回はツリー構造を作るのにTree::Simpleというモジュールを使ってみることにした。
で、
my $iter = BBS::Message->retrieve_all; my %tree; while (my $m = $iter->next) { my $parent = $tree{$m->parent} || Tree::Simple::ROOT; $tree{$m->id} = Tree::Simple->new($m, $parent); }
こんな感じでID毎のツリーオブジェクトをハッシュに入れてから、
$self->tt_process('tree.tt', { query => $q, tree => [map {$tree{$_}} sort {$a <=> $b} keys %tree], title_suffix => " - ツリー表示", });
こうして、あとはテンプレート(Template-Toolkit)に任せちゃえ!と思ったのだが問題が発生。テンプレートの中で再帰処理をする方法がわからん。っていうかできない・・・か?これができないと子供の子供(以下)が表示できない。Tree::Simple的にはtraverseというメソッドで再帰処理ができて、これはサブルーチンのリファレンスを引数にとって、各子供に対してコールバックしてくれるというもの。でもテンプレートでそんなことできないしな。
・・・まあ、今日はこんなところで、自分のレベルの低さを実感しつつ終わっておきます。
-
- -
Tree::Simple - A simple tree object - metacpan.org
Template - Front-end module to the Template Toolkit - metacpan.org