« Adobe CS4 をとにかく安く買いたい!そんな人のための購入プランを考えてみた。 | ホーム | Adobe TLPへ移行するときの注意点、メリットまとめ »

2008年11月13日

投稿した記事の関連記事を表示するタグ&カテゴリ対応のMTモジュールを書いた

一般的なニュースサイトのように、特定の記事に関連したいくつかの記事を表示できればいいなって思っていて、最初はプラグインを見つけてきて改造しようとしてたんですけど、どうやらMTタグで作れてしまうと言うことなので作ってみた。

タグだけとか、カテゴリだけってのは今回も参考にしたサイトで紹介されていたのだけど、たとえば、タグがついてないエントリがあるBlogはどうすんの(長くやってる人とかそうだよね)と思ったときに、タグがないときはカテゴリから関連記事を取ってくればいいかなと。たとえば10件出したいとして、タグだけでは10件に満たなかったら、カテゴリから引っ張ってきて補完すればいいかなと。

そんな想いで作ってみたけど、予想以上に大がかりな物になってしまった。

コメントはmt:Ignoreで挟んであります。
こいつはまず、タグをOR検索かけて、関連記事を取得し、それを列挙していきます。
関連記事の件数が、指定した件数に達していないときは、カテゴリ検索をかけて、それを列挙していきます。
それぞれの動作フローはほぼ一緒なんですが、タグ、カテゴリそれぞれに自分自身が検索結果に入ってしまうのを排除するフラグを立ててます。
んで、タグ検索後のカテゴリ検索で、タグ検索で列挙した記事が重複しないようにするための配列も用意されています。

このため、タグとカテゴリで同じ記事がある場合、それが排除されるため、指示した件数よりも少ない件数で表示されてしまう「仕様」でもあります。
タグ=カテゴリといった動作をさせているBlogでは、前半のタグ部分だけの実装で済むと思うし、そもそも1個目のエントリから全部タグ付けしてるなら、こんな冗長なモジュールを入れる必要もないです。

ポイントとしては初めのタグ検索で列挙するところに
<mt:setVar name="entryIDList" key="$entryid" value="1">
として、エントリIDをKEYとしたハッシュを生成しているところ。
これをあとのカテゴリのところで
<mt:unless name="entryIDList{$entryid}">
として利用してます。エントリIDをキーとしてハッシュから値を取り出し、もし、IDがあれば1が、なければ空文字列が返るので、unless使って条件分岐させてます。

それ以外の部分は参考サイトをみて、あとは適当に動くように改造しました。

もうちょっとシンプルにかけるかなとか思いつつ、とりあえずこれで実装して動かしてます。
重いのなんの。プラグイン書けよって感じ。

参考:WingMemo:エントリーアーカイブに関連する記事一覧を表示する

トラックバック(2)

トラックバックURL: http://okamot.com/mt/hage-tb.cgi/1838

かなり前から実装しているのですが、 このブログで利用している関連記事の出力は、 タグとカテゴリで判別して引っ張ってきております。 http://www.t... 続きを読む

久々のmovavletypeねた。 記事の個別のページに関連記事を表示するように... 続きを読む

コメントする

このブログ記事について

このページは、はげが2008年11月13日 12:57に書いたブログ記事です。

ひとつ前のブログ記事は「Adobe CS4 をとにかく安く買いたい!そんな人のための購入プランを考えてみた。」です。

次のブログ記事は「Adobe TLPへ移行するときの注意点、メリットまとめ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。