Steamer Lane Studio技術備忘録Movable Type

MovableTypeで静的ページに同一タグ一覧表示(ページネーション付)

movable-type MovableTypeで静的ページに同一タグ一覧表示(ページネーション付)
最終更新日: 2023年4月15日

ややこしい話だが、エントリーアーカイブに同じタグを付けたエントリー一覧を表示させるもの(元ネタhttp://junnama.alfasado.net/online/2007/10/mtsetvarblockmtif.html)。
某案件で前述一覧が必要だったので検討、プラグインよりこのコードの方が色々と使い回しが利くであろうことから利用させて頂きました。
で、内容的はほぼタグをカテゴリ代わりにする様なもので、記事の投稿だけでMTの管理を行わずにカテゴリ追加など煩わしい作業も発生しない優れものですが、今回そのタグの括りのなかでのページ送り機能を付けてみた。

条件::
特定のカテゴリ内のエントリーにタグを付け、そのタグによる時系列からなる一覧を表示。
イマイチなところ:タグのないエントリーを投稿するとダメ(IfTaggedで切り分けられそうだけどタグ必須の案件なんで)


<!--ページネーション-->
<mt:EntryCategory setvar="thiscat">
<$mt:EntryTitle setvar="thistitle"$>

<mt:SetVarBlock name="Sametags"><mt:EntryTags include_private="1" glue=' OR '><$mt:TagName$></mt:EntryTags></mt:SetVarBlock>
<mt:Entries category="$thiscat" tags="$Sametags">///カテゴリ内のエントリーの関連記事と分岐させるための指定///
<$mt:EntryTitle setvar="entrytitle"$>
<$mt:EntryPermalink setvar="link">
<mt:var name="__counter__" setvar="counter">

<mt:If name="entrytitle" eq="$thistitle">
<mt:var name="__counter__" setvar="offset">
</mt:If>

<mt:SetVar name="hashtitle{$counter}" value="$entrytitle">
<mt:SetVar name="hashlink{$counter}" value="$link">
</mt:Entries>

<mt:setvar name="prev" value="$offset">
<mt:setvar name="prev" value="$offset" op="--">
<mt:setvar name="next" value="$offset">
<mt:setvar name="next" value="$offset" op="++">

<ul class="flat-paginate">
<mt:If name="hashlink{$next}">
<li class="next"><a href="<mt:var name="hashlink{$next}">" title="<mt:var name="hashtitle{$next}">" rel="tooltip">前記事&nbsp;</a></li>
</mt:If>
<mt:If name="hashlink{$prev}">
<li class="previous"><a href="<mt:var name="hashlink{$prev}">" title="<mt:var name="hashtitle{$prev}">" rel="tooltip">&nbsp;次記事</a></li>
</mt:If>
</ul>
<!--/ページネーション-->

<$mt:EntryID setvar="entryid"$>
<$mt:SetVar name="count" value="0"$>
<mt:EntryIfTagged include_private="1">
<mt:SetVarBlock name="Sametags"><mt:EntryTags include_private="1" glue=' OR '><$mt:TagName$></mt:EntryTags></mt:SetVarBlock>///プライベートタグを使用可能にした///
<mt:Entries category="hoge" lastn="20" tags="$Sametags" setvar="related_entries">

<mt:EntriesHeader>///同一タグによる表示がある場合は(見出し)が表示される///
<p class="middle-heading">
hogeのxxxx一覧はこちら
</p>
</mt:EntriesHeader>
<mt:Unless tag="EntryIfAllowComments">///MTOSで自作プラグインを使わず「有る」フィールドを条件分岐用に使いまわしたのでできたタグ///
<mt:If tag="EntryID" ne="$entryid">
<mt:If name="count" lt="19">
<div>
<div style="background-image:url(<MTEntryAssets sort_by="file_name" sort_order="ascend" lastn="1"><$MTAssetURL$></MTEntryAssets><mt:Ignore><mt:EntryBody regex_replace="/<[^i].*?>|<i[^m]*?>|<iframe.*?>|<input.*?>|<ins.*?>|<isindex.*?>|\s/g","" regex_replace='/(.*?src=")(.*?)(".*)/g','$2' regex_replace='/^[^\.\/h].*/g',''></mt:Ignore>)">
<a href="<mt:EntryPermaLink>">
<img src="<mt:BlogURL>object/ppmask.png" alt="<mt:EntryTitle>" />
</a>
</div>
<p>
<span>
<a href="<mt:EntryPermaLink>">
<mt:EntryTitle>
</a>
</span>
</p>
</div>
<$mt:SetVar name="count" op="++"$>
</mt:If>
</mt:If>
</mt:Unless>
</mt:Entries>
<mt:Else>
<$mt:EntryCategory setvar="Samecat"$>
<mt:Entries lastn="20" category="$Samecat" setvar="related_entries">

<mt:EntriesHeader>
<p class="middle-heading">
hogeのxxxx一覧はこちら
</p>
</mt:EntriesHeader>
<mt:Unless tag="EntryIfAllowComments">
<mt:If tag="EntryID" ne="$entryid">
<mt:If name="count" lt="19">
<div>
<div style="background-image:url(<MTEntryAssets sort_by="file_name" sort_order="ascend" lastn="1"><$MTAssetURL$></MTEntryAssets>">///投稿内の画像を背景にしてなんか入れるので///
<a href="<mt:EntryPermaLink>">
xxxxxx(なんか)
</a>
</div>
<p>
<span>
<a href="<mt:EntryPermaLink>">
<mt:EntryTitle>
</a>
</span>
</p>
</div>
<$mt:SetVar name="count" op="++"$>
</mt:If>
</mt:If>
</mt:Unless>
</mt:Entries>
</mt:EntryIfTagged>
<mt:If name="count">
<$mt:GetVar name="related_entries"$>
</mt:If>

で、setvarがかぶってるとこは適当に削って使う様にする。
試用段階ではうまく切り分けたが、実用レベルで不具合でたら治し。