mtde.info

Movable Type Developers Express

カスタムフィールドを用いたカテゴリソート

2008年2月21日 22:09 | Writer: apstar | 記事本文

Movable Type 4 には、カテゴリのソート(並べ替え)に関するフィールドがありませんが、これをカスタムフィールドを用いて実現する方法を紹介します。

以下の例では、メインカテゴリのみを対象とし、サブカテゴリは対象にしていません。

1.フィールドの追加

samplecfld_010_01.gif

カスタムフィールドを追加する画面で、カテゴリ並べ替え用のフィールドを追加します。

このサンプルでは、以下のようにしました。

システムオブジェクト
カテゴリ
名前
ソートオーダー
説明
わかればいい。入力方法の説明とかを書いてればいい。
種類
テキスト
必須?
どっちでもいい。
規定値
0000
ベースネーム
CategorySortOrder
テンプレートタグ
CategorySortOrder

2.カテゴリへインデックスを与える

すべてのカテゴリにソートオーダーとなるインデックス(数値)を与えます。単純な番号ではなく上の桁はゼロ埋めしておきます。つまり、カテゴリ1には「0010」カテゴリ2には「0020」などと、並べたい順にインデックスを与えます。

samplecfld_020_01.gif

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>

カスタムフィールド関連サンプル

2008 mtde.info