新サイト(はてなブログ)

MTのPHP化とページ分割



カテゴリページのスクリーンショット

以前から懸念していたpermalink(個別記事へのリンク)のIDの件でやろうやろうと思っていて中々手がだせずにいたphp化及びカテゴリページのページ分割を完了させた。


やり方はいろんな方がいろんなやり方をされていて非常に迷った。

permalinkもphp化するのは凄く迷ったけど、すべての記事を.phpにすることにした。それと、長くなりすぎるカテゴリページをいくつかに分割することにより、表示を軽くしてみた。


以下にやり方を書いていこうと思う。ま、興味ある方だけ。




アーカイブファイルのphp化


php化をするに当たって個別記事のファイル名を変えることにした。デフォルトの「00000.html」の形式だと、後々サーバ移転等の際に再構築するとファイル名が変わってしまうからだ。


というわけで、MTの管理画面→BLOGの設定→ウェブログの設定


で、アーカイブファイルの拡張子を「php」にする。アーカイブの設定で、ファイル名の設定をする。


「アーカイブファイルのテンプレート」というところに然るべき記述をすると、リビルドしたときに任意のファイル名で書き出してくれる。MTって便利ですね。


やり方の例。


<$MTArchiveDate format="%Y%m%d%H%M"$>.php


こうすると、200401231400.phpのように、投稿した日付時刻でファイル名が出来る。


<$MTArchiveDate format="%Y%m/%d-%H%M"$><.php


なかにスラッシュを入れることによりディレクトリを生成することができる。


200401/24-1400.php ← こんなカンジ


また、エントリキーワード(エントリ画面のカスタマイズをすることにより出現する)を入力することにより、そのキーワードが入ったファイル名を生成することも出来る。


<$MTArchiveDate format="%Y%m/%d-%H%M"$><$MTEntryKeywords dirify="1"$>.php


例えばキーワードに「mario」を入れておくと、


200401/24-1400mario.php ← こんなカンジで。


ここで問題が出てきた。元の00001.htmlというファイルが無くなる訳だから、GOOGLE等で検索で飛んできたヒトは404エラーになるという事。実はこれが原因でなかなかPHP化できなかった。

.htaccessにリダイレクトの記述をすれば良いのは分かってたけど、膨大な過去ログを一つ一つ記述するのは大変なのでやりたくない。


で、色々探してたらあった。

ARTIFACTさんで詳しい解説が。


htaccessのRedirect permanentを利用して、旧URLにアクセスした場合、新URLに飛ぶようにしました。

「Templateの編集」⇒「新しい Index Template を作る」

で下記テンプレートを追加、「Index Template を Rebuild するときに自動的にこの Template を Rebuild する」にチェックをいれ、適当なファイルネームで生成、それでできたファイルの内容を.htaccessファイルに追加します。



<MTArchiveList archive_type="Individual">

Redirect permanent /mt/archives/

<MTEntries>

<$MTEntryID pad="1″$>.html

</MTEntries>

<$MTBlogURL$>mt/archives/

<$MTArchiveDate format="%Y%m"$>/

<MTEntries>

<$MTEntryKeywords dirify="1″$>.html</MTEntries>

</MTArchiveList>



もう目から鱗落ちまくり


どういうことかというと、httaccessに記述すべきものが一瞬にして出来上がる。


Redirect permanent /archives/000420.html https://crossbreed.tv/archives/200401241610.php

これで全てのアーカイブをリビルドしてオワリ。


カテゴリアーカイブの分割

まず、MT Extensions: MTPaginate 1.2.2

↑ここでプラグインをDLします。解凍して /plugin/ にアップロード。


これで準備はOKです。次にカテゴリテンプレートを開き、以下のようにタグを追加です。

<div class="blog">

<MTPaginate>



<MTPaginateIfMultiplePages>

<div class="mpage">

<MTPaginateIfLastPage_>

<a href="<$MTPaginatePreviousPageLink$>">◀</a>

</MTPaginateIfLastPage_>

<MTPaginateIfFirstPage_>

<a href="<$MTPaginateNextPageLink$>">▶</a>

</MTPaginateIfFirstPage_>

<MTPaginateIfMiddlePage_>

<a href="<$MTPaginatePreviousPageLink$>">◀</a>

<a href="<$MTPaginateNextPageLink$>">▶</a>

</MTPaginateIfMiddlePage_>

<$MTPaginateNavigator format_all="全部読む " place_all="after" separator=" | ">

</div>

</MTPaginateIfMultiplePages>

<MTPaginateContent max_sections="8">



<MTEntries>



(中略)



<$MTPaginateSectionBreak$>

</MTEntries>



</MTPaginateContent>



<MTPaginateIfMultiplePages>

<div class="mpage">

<MTPaginateIfLastPage_>

<a href="<$MTPaginatePreviousPageLink$>">◀</a>

</MTPaginateIfLastPage_>

<MTPaginateIfFirstPage_>

<a href="<$MTPaginateNextPageLink$>">▶</a>

</MTPaginateIfFirstPage_>

<MTPaginateIfMiddlePage_>

<a href="<$MTPaginatePreviousPageLink$>">◀</a>

<a href="<$MTPaginateNextPageLink$>">▶</a>

</MTPaginateIfMiddlePage_>

<$MTPaginateNavigator format_all="全部読む " placement_all="after" separator=" | ">

</div>

</MTPaginateIfMultiplePages>



</MTPaginate>



</div>



これで良いはずです。完成すると↓カテゴリページがこんなふうに分割されてるはずですよ。


カテゴリページのスクリーンショット

カテゴリ分割を入れたのはいいのですが、ウチは


カテゴリページへのアクセスがほとんどないという罠(泣


【04/05/26 追記】
ちなみに、MTPaginateContent max_sections="8″というタグは
「8つ以上のエントリがあったら分割しますよ」
というものです。