top

同一カテゴリー内での前後エントリーへのリンク(1) プラグイン版

個別エントリー頁に、同一カテゴリ内での前後リンクもあったら便利ですよね。今回作ったフォトログはカテゴリ分けを重視した作りにしたかったので、個別頁はカテゴリ内での前後リンクで移動するようにしてみました。

静的生成ならPrevious and next in categoryというプラグインがありますが、ダイナミック用のプラグインもあります。以下、ダイナミック頁で同一カテゴリ内での前後リンクを作る方法を覚え書き。

1.プラグインのセット
こちらからPHP PreviousNextInCategoryをダウンロードします。解凍すると「block.MTEntryNextInCategory.php」と「block.MTEntryPreviousInCategory.php」の2つのファイルが出てきます。これをMT本体をインストールした場所にある「php」フォルダの中の「plugins」ディレクトリにアップします。

2.カテゴリ内での前後リンクのタグ
以下のタグをエントリーアーカイブの好きなところに追加します。

<MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink$>">&laquo; <$MTEntryTitle$></a> | </MTEntryPreviousInCategory>
<a href="<$MTEntryLink archive_type="Category"$>"><$MTEntryCategory$></a>
<MTEntryNextInCategory>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> &raquo;</a>
</MTEntryNextInCategory>

たったこれだけ!で完了です。ストレートに使えるプラグインはやっぱりいいものですね~。

なお、関連情報の載っているサイトなどを見てまわると、このプラグインではメインカテゴリでの前後リンクしか表示されないので、複数カテゴリを使っている場合にはちょっと苦しいみたいです。修正して工夫されている方々もおられるようですが。ちなみに静的生成では1つ前の記事に自動でリンクを出現させるのにかなり苦労するみたいなので、どちらかというとダイナミック向けのカスタマイズかも。

■MT4への修正方法(2007.11追記)
3.3用PHPプラグインはそのままではMT4には使えません。いずれ配布サイトが対応してくれると思いますが、それまでにこのプラグインをMT4で使いたい方のために修正方法を覚え書きしておきます。行数は3.3用ファイルのもので書いています。

このプラグインはphp/lib/以下にあるblock.mtentrynext.php・block.mtentryprevious.phpと同じ作りになっているのですが、3.35と4.0でこのファイルに変更があったため、ファイル名だけでなく、内容も同じ個所を変更する必要があるのでそれも合わせて載せています。

block.mtentrynextincategory.php
まず、ファイル名のblock.MTEntryNextInCategory.phpを全て小文字に変えて下さい。
オリジナルファイルの以下の行数に相当する個所に赤字の部分を追加・変更します。

13行目

function smarty_block_MTEntryNextInCategory($args, $content, &$ctx, &$repeat) {
          ↓
function smarty_block_mtentrynextincategory($args, $content, &$ctx, &$repeat) {

24行目~

$ts = $entry['entry_created_on'];
$blog_id = $entry['entry_blog_id'];
          ↓
$ts = $entry['entry_authored_on'];
$blog_id = $entry['entry_blog_id'];
if (isset($args['class'])) {
$class = $args['class'];
} else {
$class = 'entry';
}

36行目~

'sort_order' => 'ascend',
'current_timestamp' => $ts);
          ↓
'base_sort_order' => 'ascend',
'current_timestamp' => $ts,
'class' => $class
);

block.mtentrypreviousincategory.php
まず、ファイル名のblock.MTEntryPreviousInCategory.phpを全て小文字に変えて下さい。
オリジナルファイルの以下の行数に相当する個所に赤字の部分を追加・変更します。

14行目

function smarty_block_MTEntryPreviousInCategory($args, $content, &$ctx, &$repeat) {
          ↓
function smarty_block_mtentrypreviousincategory($args, $content, &$ctx, &$repeat) {

24行目~

$ts = $entry['entry_created_on'];
$blog_id = $entry['entry_blog_id'];
          ↓
$ts = $entry['entry_authored_on'];
$blog_id = $entry['entry_blog_id'];
if (isset($args['class'])) {
$class = $args['class'];
} else {
$class = 'entry';
}

36行目~

'blog_id' => $blog_id);
     ↓
'blog_id' => $blog_id,
'class' => $class
);

よろしくです。

<2008.7.1 追記>
MT4からはプラグインを使わずMTタグだけで同じことが出来るようになったので、その方法も追加しました。
4.0~ 同一カテゴリー内での前後エントリーへのリンク(3)改 MT4.0~
4.1~ 同一カテゴリー内での前後エントリーへのリンク(2) MT4.1~

 

コメント

こちらも欲しかった機能なので入れてみたのですが、こちらのプラグインを入れるとかなり重くなるような気がするのですが、やはりプラグインでもかなり負荷がかかるものでしょうか。

確かにプラグインを入れるとその分多少負荷は増えると思いますが、1つ入れたくらいで体感するほどの違いは出ないと思いますし、これはそんなに重いプラグインでもないと思います。
試しに以下の頁を開いてみて下さい。このプラグインを使ってダイナミック表示させている頁です。
http://wing.w-museum.com/photo-t/archives/2005/08072246.html
一瞬で開くと思います。むしろ頁表示の方が速すぎて画像のロードの方が追いつかないくらいです。
テキストがほとんどないフォトログなのでふつうのブログと比べるのは無理があるかもしれませんが、その分純粋にプラグインの処理速度が測れるように思います。

頁そのものを軽くするなどの工夫をされるとプラグインがあってもそれほど重くはならないのでは?と思うのですが…。

なるほどです。

ページ構成自体はそれほど大きなものではないと思っているのですが、まだダイエットした方がよさそうですね。

あれから外部ファイル化などしているのですが、やはりページ自体が大きすぎるせいか、503エラーがでる場合が多いです。この時点でサーバの処理能力とのバランスがまだとれてない、ということなのでしょうね。

ところでトップページを外部化していてちょっとフに落ちないことが。

○○○.com/と○○○.com/index.htmlをアクセスした時の表示が違うようなのです。○○○.com/のアクセスは前の状態のもの?らしく、○○○.com/index.htmlはダイナミックで育成されたもののようです。

キャッシュが残っているのかもしれませんが、どこを消したらよいのかわかりません。

.htaccessで設定するものなのかもしれませんが、デフォルトのままですのでどこを変えたらよいものか今ひとつわからずです。

キャッシュについてもどこでお聞きしたらよいのかわからなかったのでこのままこちらでコメントさせていただきますが、

「caching =true」と「conditional =true」の違いがよくわかりません。「conditional =true」の方にはifで条件分岐できるようなのですが、これらは2つとも記述した方がよいのでしょうか。

キャッシュとあるので誰かが一度でもアクセスしきれれば、静的ページが育成・保存され、更新されない限りそれが読まれる、といったことなのでしょうか?それとも単に自分のPCにキャッシュされる、というような意味なのでしょうか?

よろしくお願いします。

こんにちは。
キャッシュのことも含めてダイナミックで負荷を少なくして速く表示する方法などを書いてみましたので、詳しくはそちらをご覧下さい。

>○○○.com/と○○○.com/index.html
お返事を書こうとしたら新しいコメントが来てたのですが、内容からしてこちらの問題は解決されたみたいですね? 続きは「MTIncludeタグの使い方とモジュール化」の方に書きますね

ありがとうございます。

プラグインですが入れるとやはり何故か遅くなってしまいます。外すとサクっと表示します。もしかしてモジュール化したものを入れるのと、そのまま記述するのとでなにかしら動作が違ってくるものでしょうか。どちらも試してみたのですが、やはり表示がおそくなるという感じなので、こちらももう一度見直してみます。

<MTEntryNext>などと併用すると遅くなるのかな?と思ったものの、今動作検証中のMT4ベータでは同時使用していても特に遅くなることもなく…。
ちょっとよく分かりませんので、いろいろ試してみて下さい。