アルファサード株式会社 代表取締役 野田 純生のブログ


KOFの会場にACアダプタ忘れて来て凹む。


公開日 : 2007-11-11 06:04:08


KOFで話して来た...のはいいんだけど帰ってみるとMacBookのACアダプタが無いことに気づく。事務局に確認するにしてもとたんに月曜日困るからなぁ...凹む。

ってかバレーの選手たちが頑張ってるのに凹んでる場合じゃないですぜ、旦那(笑)。

思い当たったのが、カテゴリでの絞り込みをした際の個別エントリーページの表示。この時、前のエントリーと次のエントリーへリンクを張るわけですが、ここのロジックがかなり地道な作業を行っており、一つエントリーを拾ってきてカテゴリを照会し、異なれば次のエントリーを拾って、ということをやっているんですね。で、コレで何がどうなるのかというと、膨大なエントリーがあるブログで、例えばとあるカテゴリーに1件しかエントリーがない場合、あるはずのない同一カテゴリーに所属するエントリーを求めて、端から端までなめる訳です。

もしもブログ内の各エントリーの authored_on (created_on) がユニークだと決めうちしちゃえるなら以下のような感じで。決めうちできないなら authored_on から数字を(足す|引く)してから数件取得すればいいと思います。でも僕だったらカテゴリーのエントリーをリストアップした時に前後のエントリーIDを引数にくっつけちゃいますけどね。...&next=131&prev=98 とか。


my $next = neighbor_entry($entry, $category->id, 'next');
my $prev = neighbor_entry($entry, $category->id, 'prev');

sub neighbor_entry {
    my ($entry, $category_id, $prev_or_next) = @_;
    my $direction = 'ascend';
    if ($prev_or_next eq 'prev') {
        $direction = 'descend';
    }
    return MT::Entry->load({ blog_id => $entry->blog_id,
                             status => 2 },
                           { sort => "authored_on",
                             start_val => $entry->authored_on,
                             direction => $direction,
                             limit => 1,
                             'join' => [ 'MT::Placement', 'entry_id',
                                       { blog_id => $entry->blog_id,
                                         category_id => $category_id },
                                       { unique => 1 } ],
                           } );
}
カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の創業者であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ