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文字が「あかさたなはまやらわ」に該当する場合のみ見出しをつける形になってます。
なお、見出しをつける方法はカスタムフィールドを使う場合にも応用できるかと思います。

 

コメントを投稿

 


 <注意>
 ご利用のブラウザ、設定ではコメントのプレビューおよび投稿はご利用になれません。
 コメント投稿の際はお手数ですがjavascriptをオンにして下さい。
 *javascriptオフのまま投稿ボタンを押すと送信内容が消えますのでご注意下さい。