Steamer Lane Studio技術備忘録Movable Type

MovableType 1エントリー2カテゴリでカテゴリ毎エントリーページ

movable-type MovableType 1エントリー2カテゴリでカテゴリ毎エントリーページ
最終更新日: 2023年4月15日

ちょっとややこしい表題だが・・・
・複数カテゴリに属するエントリーを
・カテゴリ毎に表示する内容を変えたい(例:主ではEntryBody、副ではEntryMore等設定するとして)
といった場合について。

基本MTは1エントリーにつきエントリーアーカイブの出力・作成は1ページとなっている。PermaLink先はPrimalyCategoryを基本としている。
例えば「静的ページ分割」といった手法により本来1ページであるものをページ分けする手法も考えられなくはないが、アーカイブを副カテゴリ用に作る方がより現実的。
今回、そういった必要が生じたので組んでみた。
ただし、今回は以前やった「エントリーアーカイブページの出力制限」との組み合わせにより、アーカイブをカテゴリアーカイブまでとしてエントリーアーカイブを作成しないカテゴリと、本エントリーの主題である1エントリー(2)カテゴリー出力が混在する形。

WriteToFileプラグインを使用し、エントリーアーカイブテンプレートに追記。

<mt:EntryPrimaryCategory>
<$mt:CategoryID setvar="primary_cat_id"$>
</mt:EntryPrimaryCategory>
<mt:EntryCategories>
<mt:If tag="CategoryID" eq="$primary_cat_id">
<mt:SetVar name="out" value="1">
<mt:SetVar name="no_file" value="1">
<mt:Else>
<mt:SetVar name="out" value="0">
<mt:SetVar name="no_file" value="0">
</mt:If>
<mt:FileTemplate format="%c/%f" setvar="filename">
<mt:WriteToFile file="$filename" archive_path="1" out="$out" no_file="$no_file">

///元のテンプレートの内容///

</mt:WriteToFile>
</mt:EntryCategories>

この様に追記をする。

<mt:FileTemplate format="%c/%f" setvar="filename">

上記の「%c/%f」部分が出力ファイル名/パスだが、カテゴリ/DD-HHNNSS.拡張子と出力されるので元のエントリーアーカイブのアーカイブマッピングパスと重複しなくなるように配慮。
また、副カテゴリによるエントリー一覧はEntryPermaLinkを使用すると主カテゴリ側になってしまうので、urlのパスが副カテゴリになるよう別途設定する。
エントリーアーカイブの出力制限をかける際のシステムとの併用も特に問題はないが、細かい部分で条件分岐に纏わるエラーが現出しかねないので、設計段階から注意を払う必用がある。