カスタムフィールドを用いたカテゴリソート
Movable Type 4 には、カテゴリのソート(並べ替え)に関するフィールドがありませんが、これをカスタムフィールドを用いて実現する方法を紹介します。
以下の例では、メインカテゴリのみを対象とし、サブカテゴリは対象にしていません。
1.フィールドの追加
カスタムフィールドを追加する画面で、カテゴリ並べ替え用のフィールドを追加します。
このサンプルでは、以下のようにしました。
- システムオブジェクト
- カテゴリ
- 名前
- ソートオーダー
- 説明
- わかればいい。入力方法の説明とかを書いてればいい。
- 種類
- テキスト
- 必須?
- どっちでもいい。
- 規定値
- 0000
- ベースネーム
- CategorySortOrder
- テンプレートタグ
- CategorySortOrder
2.カテゴリへインデックスを与える
すべてのカテゴリにソートオーダーとなるインデックス(数値)を与えます。単純な番号ではなく上の桁はゼロ埋めしておきます。つまり、カテゴリ1には「0010」カテゴリ2には「0020」などと、並べたい順にインデックスを与えます。
3.カテゴリリストのコードを書き換える
以下のように書いたコードで生成するリストは、カスタムフィールドにて与えたインデックスどおりの並び順となります。
catid変数へ与えられる値が、カスタムフィールドにて与えたゼロ埋めのインデックスです。MTLoopではsort_by="key"モデファイアでは数値順ではなく文字列順に並べ替えがされますのでゼロ埋めは必須です。
catlinkset変数へは、カテゴリのリンク、名前などをhtmlタグなどとあわせて一式(セット)で与えています。これをハッシュの値とします。
<MTCategories>
<MTSetvarBlock name="catid"><MTCategorySortOrder></MTSetvarBlock>
<MTSetvarBlock name="catlinkset"><a href="<MTCategoryArchiveLink>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<MTCategoryDescription>"</MTIfNonEmpty>><MTCategoryLabel> (<MTCategoryCount>)</a></MTSetvarBlock>
<MTSethashVar name="catlist">
<MTSetVar name="$catid" value="$catlinkset">
</MTSethashVar>
</MTCategories>
<MTLoop name="catlist" sort_by="key">
<p><MTGetvar name="__value__"></p>
</MTLoop>
- ページ先頭へ
- 次のエントリ: ユーザー情報を拡張する
- カテゴリ:カスタムフィールド関連サンプル