movable-type
MovableTypeのArchivelistループの中の指定件数を除外
作成日: 2024年11月28日
もともとはカテゴリーアーカイブの中の日付アーカイブ一覧(あまり使わないパターンだが・・・)だが、SEO対策余波でこのページ(ページ分けしている最初でいいが)もインデックス登録させたいってことから発した。
SEO的に効果があるか否か、意義があるかは置いといて、単なる一覧表示ではまぁインデックスされないがコンテンツって認識されればインデックスされる(かな?)。一覧表示ってのは検索ワードに対してその集合体で意味があれば、インデックスされるし検索表示もされる(筈、過去された)。
通常はカテゴリーアーカイブでも一覧以外にいろいろコンテンツ書いたりするが、そうしないサイトの場合最新投稿のexcerptをコンテンツ的に配置し、最新2件目以降を一覧表示させることで検索エンジンへのアピールとしたかった。ページネーションのタグ等はきっちり仕込んでるから、2ページ目以降は続きの一覧でOK、だがページ分けにPageButeプラグインを使っていてそれが厄介だった。
エントリーアーカイブならループを二つ作り、一つをexcertp用にしてlastn=”1″表示、もう一つはoffset=”1″で一覧表示として、excerpt分が一覧表示されないようにした。
uniqeタグを使わないのはPageButeのタグ内ではどうも正常に働かない様なので、ループにて間違いないように設定した。
Archivelistではoffsetモディファイアが使えない、MTForなどもPageButeの中では使えない。プラグインのタグ内で動くものを模索、結局一番単純なmtif __conter__ le=”1″が正しかった。
<MTPageContents count="20">
<mt:ArchiveList type="Category-Daily">
<mt:If name="__counter__" le="1">
<mtelse>
一覧表示出力処理
<$MTPageSeparator$>
</mtif>
</mt:ArchiveList>
</MTPageContents>
要は最初の1件の場合の処理をせず、それ以外を一覧表示のための出力とした。
今何ページ目かの確認
エントリーアーカイヴ含めてだが、1ページ目にexcerpt表示させるためのページ確認が必要で、これはtitle他でページ番号を振っているPageButeによるpagecountでいけると踏んでいた。
ところがページ番号の出力自体は問題ないが、これを変数化しMTIfで処理しようとすると値が消えてしまった。プラグインページにはそうした記述があったが、毎度使っているから読んでなかったために苦心した。
結局phpスクリプトで現在のページを取得し1ページ目と一致したら表示という条件分岐を書いて収めた。
MTサイトでも、phpと組み合わせていろいろやっているから拡張子phpにしていたからできること(htmlだったら完全静的で考えないといけなかった)だが、うまく収まった。
この程度(excerpt部分)のサーバーサイド出力ならさしたる問題はない(と思う)。
<?php $content ='
MTタグによるexcerpt出力
';
?>
<?php $currentFileName = basename($_SERVER['PHP_SELF']);if ($currentFileName === 'index.php'): ?>
<?php echo $content;?>
<?php endif;?>
結局2ページ以降にもexcerptは出力されるが、phpで現在ページのパス確認し1ページ目であるindex.phpならそれを表示とした。
画像は完成画像(excerptにimgタグの残骸があるので処理が要るが)。
MTタグのみでもっと良いやり方があるかもしれないが、最新投稿のみexcerpt表示+最初のページのみ都合一覧表示が1件多くなることからphpに頼るやり方のほうが早いかもしれない。
WordPressもMovableTypeも双方「足らない」ものがあり、あくまでブログ用のWordPressは仕方ないとしても、サイト用にとしているMTはもうちょっとこうしたところのカスタイマイズ性、本件で言えばページ分割をプラグイン頼りってのはどうにかしてほしい(ネットで探すとmtmlのみで作る方もいる、そのうちトライするけど)ね。