RelatedEntriesプラグインの改造

拙著「ブログ簡単パワーアップMovable Typeスーパーカスタマイズテクニック」の中で、「RelatedEntries」というプラグインを紹介しています。
このプラグインは、エントリー間の関連付けを設定して、エントリーに関連する他のエントリーを一覧表示できるようにするものです。

このプラグインに対して要望がありましたので、改造方法を紹介します。

1.すべてのBlogから関連するエントリーを取り出したい

RelatedEntriesプラグインの標準の動作では、エントリーと同一のブログからのみ関連するエントリーを取り出します。
しかし、複数のBlogを管理している場合、それらすべてのBlogから関連するエントリーを取り出したい場合もあります。
その場合は、RelaatedEntries.plの以下の2箇所を書き換えます。

・183行目
書き換え前:{ blog_id => $blog_id },
書き換え後:{},

・221行目
書き換え前:my $entry_count = MT::Entry->count({ blog_id => $blog_id });
書き換え後:my $entry_count = MT::Entry->count();

2.タイトル順に並べ替えて出力する

RelatedEntriesプラグインの標準の動作では、関連するエントリーは日付順に並べ替えて出力します。
ただ、これをタイトル順に変えたいという場合もあります。
それには、RelaatedEntries.plの34行目~48行目を以下のように差し替えます。

・差し替え前

# get attributes
$lastn = $args->{'lastn'} or $lastn = 0;
$sort_order = $args->{'sort_order'};
if ($sort_order ne 'ascend' && $sort_order ne 'descend') {
    $sort_order = $blog->sort_order_posts;
}

# load related entries
my @related_entries;
&load_related_entries($entry->id, \@related_entries);
if ($sort_order eq 'ascend') {
   @related_entries = sort { $a->created_on <=> $b->created_on } @related_entries;
} else {
   @related_entries = sort { $b->created_on <=> $a->created_on } @related_entries;
}

・差し替え後

# get attributes
$lastn = $args->{'lastn'} or $lastn = 0;
$sort_order = $args->{'sort_order'};
if ($sort_order ne 'ascend' && $sort_order ne 'descend') {
    $sort_order = $blog->sort_order_posts;
}
my $sort_by = $args->{'sort_by'};
$sort_by = '' if ($sort_by ne 'title');

# load related entries
my @related_entries;
&load_related_entries($entry->id, \@related_entries);
if ($sort_by eq 'title')  @related_entries;
    } else {
        @related_entries = sort { $b->title cmp $a->title } @related_entries;
    }
}
else  @related_entries;
    } else {
        @related_entries = sort { $b->created_on <=> $a->created_on } @related_entries;
    }
}

これにより、MTEntriesRelatedEntriesタグに「sort_by」というアトリビュートが追加されます。
「sort_by="title"」とすると、エントリーのタイトルで並べ替えられるようになります。それ以外の場合はエントリーの日付順で並べ替えられます。
また、「sort_order」アトリビュートと併用して、昇順/降順を切り替えることもできます。