top

エントリーをキーワードで50音順に並び替え

映画や本のレビューでは記事タイトルを50音順に並べたくなることがあります。その場合、<mt:Entries sort_by="title">を使えばいいように思いますが、日本語は漢字・ひらがな・カタカナ・濁音・長音・小文字が入り乱れていて、実際にはsort_by="title"では思うような順番に並んでくれません。ではどうするか? 一般的にはカスタムフィールドを作って、カタカナ等に統一した並び替え用のワードを設定することになると思います。しかしMTOSではカスタムフィールドが使えない…そんな時の隠れ技です。

公式マニュアルには載っていませんが、実は<mt:Entries sort_by="keywords">で、キーワードで並べ替えが出来るんです! キーワード欄が空白なら、これを使わない手はない。自分なりにルールを作って、「濁音は無視する・長音と小文字は反映させる・英文字は発音」なら、

アベンジャーズ→あへんしやあす
スーパーマン→すうはあまん
E.T.→いいてい

のように並べ替え用のワードをキーワードに設定し、以下のように書けば「あいうえお」順に並びます。

<ul>
<mt:Entries sort_by="keywords" sort_order="ascend">
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
</mt:Entries>
</ul>

■応用1:見出しをつける
あ、い、う、…と見出しを付ける場合は以下のように。

<mt:Entries sort_by="keywords" sort_order="ascend">
<mt:SetVarBlock name="kw"><$mt:EntryKeywords trim_to="1"$></mt:SetVarBlock>
<mt:Unless name="ekw" eq="$kw">
<mt:If name="kw" ne="あ"></ul></mt:If>
<h3><mt:Var name="kw"></h3>
<ul></mt:Unless><mt:SetVarBlock name="ekw"><mt:Var name="kw"></mt:SetVarBlock>
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:Entries>
</ul>

<表示イメージ>

・アイアンマン
・アベンジャーズ

・E.T.
・インセプション

trim_to="1"でキーワードの最初の1文字を拾い出し、最初の文字が変わる度に見出しが出る仕組み。

■応用2:「あ行」「か行」で見出しをつける
「あいうえお」はまとめて「あ行」、「かきくけこ」はまとめて「か行」にしたい場合に。

<mt:Entries sort_by="keywords" sort_order="ascend">
<mt:SetVarBlock name="kw"><$mt:EntryKeywords trim_to="1"$></mt:SetVarBlock>
<mt:Unless name="ekw" eq="$kw">
<MTIf name="kw" like="^(あ|か|さ|た|な|は|ま|や|ら|わ)"><mt:If name="kw" ne="あ"></ul></mt:If>
<h3><mt:Var name="kw">行</h3>
<ul></mt:If><mt:SetVarBlock name="ekw"><mt:Var name="kw"></mt:SetVarBlock>
</mt:Unless>
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li></mt:Entries>
</ul>

<表示イメージ>
あ行
・アイアンマン
・アベンジャーズ
・E.T.
・インセプション
か行
・ガメラ
・キングコング
・ゴジラ

原理は同じですが、最初の1文字が「あかさたなはまやらわ」に該当する場合のみ見出しをつける形になってます。
なお、見出しをつける方法はカスタムフィールドを使う場合にも応用できるかと思います。