Steamer Lane Studio技術備忘録Movable Type

MTでプライベートタグをカテゴリ代わりに利用

movable-type MTでプライベートタグをカテゴリ代わりに利用
最終更新日: 2023年4月15日

小難しい要件、MTOS(最終版)と自作プラグインを使わず世に出回っている無償プラグインだけのシステム。
普通にカテゴリを追加/あてはめても良いのだが、2階層目のカテゴリと3階層目のカテゴリを50から増やさなければならず、ここはカテゴリが増える事を嫌い、プライベートタグにて類似した形を考えた。タグはタグで既に使用していて、プライベートタグも既に使用されているが、正規化の前方一致でフィルタリングしリスト化。
そのままではプライベートタグの抽出一覧(カテゴリーアーカイブ相当)は検索結果に反映されないので、プライベートタグに関する抽出一覧はテンプレートを別にする。

準備
検索結果テンプレートを別にするため、mt-configに
SearchAltTemplate hoge hoge.tmpl
を追記。

プライベートタグのマーキング
プライベートタグと並べてフィルタリングするためのマーキングワードを決める。仮にfugaとすると、@fugaをタグの接頭辞とする。

既存のカテゴリーアーカイブに追記するプライベートタグ一覧抽出のタグ

<mt:Entries category="属するカテゴリ" include_subcategories="1">
<mt:EntryTags include_private="1">
<$MTTagLabel setvar="tagname"$>
<MTUnless name="seen{$tagname}">
<MTSetVar name="seen" key="$tagname" value="1">
<MTSetVarBlock name="push(tag_htmls)">
<mt:Unless tag="taglabel" like="^@fuga">
<mt:Else>
<a class="search-link" href="<$MTTagSearchLink$>&Template=hoge" style="background-image:url(<mt:TagLabel setvar="Sametags"><mt:EntryAssets type="image" sort_by="file_name" sort_order="ascend" lastn="1"><$mt:AssetThumbnailURL width="480"></mt:EntryAssets>)">
<span class="tag-wrap">
<span>
<mt:TagLabel replace="@fuga","">
</span>
</span>
</a>
</mt:Unless>
</MTSetVarBlock>
</MTUnless>
</MTEntryTags>
</MTEntries>
<MTLoop name="tag_htmls">
<MTVar name="__value__">
</MTLoop>

前記リンクから飛んだ先の一覧ページ、hoge.tmpl
先ず、<mt:SearchResults></mt:SearchResults>の間ではプライベートタグを拾わないので、(カテゴリーアーカイブの代用なら<mt:SearchResults>は不要かもだが)抽出部分はこのタグ内から外す。
専用テンプレートなので、titleタグ部分など適せん変更し、web的に問題ないようにする。
エントリーリストは

<mt:SearchString setvar="tag_label">
<mt:Entries tag="$tag_label">
<div style="background-image:url(<MTEntryAssets sort_by="file_name" sort_order="ascend" lastn="1"><$MTAssetURL$></MTEntryAssets>)">
<a href="<mt:EntryPermaLink>">
<p>
<mt:TopLevelParent><mt:CategoryBaseName regex_replace="/-/g","\n" capitalize="1"></mt:TopLevelParent>
<mt:Entries category="属するカテゴリ" sort_order="ascend" lastn="0">
<mt:SetVarBlock name="ID"><$mt:EntryID$></mt:SetVarBlock>
<mt:SetVarBlock name="IDS" key="$ID"><$mt:GetVar name="__counter__"$></mt:SetVarBlock>
</mt:Entries>
<mt:SetVarBlock name="entry_ID"><$mt:EntryID$></mt:SetVarBlock>
<$mt:GetVar name="IDS" key="$entry_ID" $>
</p>
<h3>
<mt:EntryTitle>
</h3>
</a>
</div>
</mt:Entries>

上記の<p>内は、エントリーアーカイブに連番を振るタグなので、普通に使うときは無しで可。divの背景に投稿画像を用いた。

これで特定のカテゴリに属する記事をプライベートタグにて切り分け抽出できる。