こんにちは五十嵐です.タグによる検索の設定です.表示されたタグをクリックして,同じタグを持つブックマークを表示します.
ブックマークの一覧でタグを表示させましたが,その部分を以下のように変更します.
root/template/personal/personal_center.tt:
[%- FOREACH tag_v IN bookmark_v.tags -%]
[%- SET tagelement = 'tag_' _ bookmark_v.id _ tag_v | html | collapse -%]
<span id="[% tagelement %]" class="eachtag">
[%- tag_v | html %]</span>,
[%- END -%]
javascript を追加して,マウスのポインタがタグ表示の上を通過したときに表示が変わるようにします.
[% FOREACH tag_v IN bookmark_v.tags %]
[%- SET tagelement = 'tag_' _ bookmark_v.id _ tag_v | html | collapse -%]
var var_[% tagelement %]
= _getElementById('[% tagelement %]');
var_[% tagelement %].onmouseover
= function () {
this.style.color='#ffffff';
this.style.background='#999999';
this.style.cursor='pointer';
}
var_[% tagelement %].onmouseout
= function () {
this.style.color='#000000';
this.style.background='#ffffff';
this.style.cursor='auto';
}
var_[% tagelement %].onclick
= function () {
location.href
= '/searchbookmark?tag='
+ encodeURI('[% tag_v | html %]');
}
[% END %]
クリックすると /searchbookmark を呼び出します.
サーバ側ではタグに対応するブックマークを検索し,応答を返します.
sub searchbookmark : Path('/searchbookmark') {
my ( $self, $c ) = @_;
...(省略)
# Bookmark の検索
$tid = $c->model('SecureSBMDB::Tag')->
find( {tag_name => $data{tag}} )->tag_id;
foreach my $ub ($udb->user_bookmarks->all){
foreach my $t ($ub->user_bookmark_tags->all){
if( $t->tag_id == $tid ){
my $tmpbe = _makeOneBookmarkEntry( $c, $ub->bookmark_id );
if( $tmpbe ){
unshift( @bookmarks, $tmpbe );
}
}
}
}
$c->stash->{pagetitle} = 'Secure-SBM Search Bookmark Result';
$c->stash->{template} = 'personal/personal.tt';
$c->stash->{mybookmarks} = \@bookmarks;
}
タグのマッチングを行い,結果を mybookmarks に格納しています._makeOneBookmarkEntry() は,「
[Secure-SBM:017] ブックマークの登録(2)」 で使用したものです.テンプレートは personal.tt をそのまま使用します.
次回は,ロールに関する処理を追加します.
2007/04/02 記
参考:
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク