Under the Bridge

a Picture of the Late Him

MT4.1:カテゴリの並べ替え(カスタムフィールド+ハッシュ変数)

2008年1月14日 13:36 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

Movable Type 4.1以降でしか動作しない。

先日のカテゴリ並べ替え(MT4.1:カテゴリの並べ替え(プラグイン使わず))を、実用に耐えるように拡張したサンプル。

プラグインは用いないが、カスタムフィールドを用いる。

準備1

カスタムフィールドで新しいフィールドを作成する。

  • システムオブジェクト:カテゴリ
  • 名前:ソートオーダー
  • 説明:わかればいい。入力方法の説明とかを書いてればいい。
  • 種類:テキスト
  • 必須?:どっちでもいい。
  • 規定値:0000
  • ベースネーム:勝手につくがそのままとした。
  • テンプレートタグ:CategorySortOrder
20080114_01.gif

準備2

すべてのカテゴリにソートオーダーとなる数値を与える。単純な番号ではなく上の桁はゼロ埋めしておくこと。

つまり、カテゴリ1には「0010」カテゴリ2には「0020」などと、並べたい順に数値を与える。

20080114_02.gif

カテゴリを並べるサンプルコード

<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>

<mt:loop  name="catlist" sort_by="key">
    <p><$mt:getvar name="__value__"$></p>
</mt:loop>

メカニズム

1行目:カテゴリループ開始

2行目:MTSetVarBlockを用い、catid変数へ、カスタムフィールドで与えたソートオーダーを代入。MTCategorySortOrderタグでソートオーダーを取得できるようになっている。本当は、標準テンプレートタグで適切な「使える値」があればよかったのだが、思いつくのはMTCategoryIDとMTCategoryBaseNameくらいしかなく、役不足であった。

3行目:catlinkset変数へ、リンク・タイトルなどを含んだカテゴリ名リンクのコードをワンセットで与える。

4行目:MTSethashVarでcatlistハッシュ変数を宣言

5行目:name値へcatid変数(つまりソートオーダー)、value値へ:catlinkset変数(つまりリンクセット文字列)をぶち込む。

6行目:MTSethashVar閉じるタグ

7行目:カテゴリループオワリ

8行目:空白。意味はない。

9行目:ループ開始。変数にcatlistを指定、sort_by="key"モデファイアをつける。このモデファイアである程度の並べ替えは可能(昇順、降順とか)。

10行目:リンクセットをMTGetVarで取り出す。カテゴリリンクのコードがセットでそのまま吐き出される。

11行目:ループオワリ

結果と考察

Movable Type 4.1ベータ3で正常動作する。しかしなにかと面倒である。

そもそも、MT3.xのころから「何でカテゴリのソートオーダーってついてないのか?」と、甚だ疑問であった。カテゴリ名先頭へ数字文字をつけてプラグインでカットする、カテゴリ名へ<0100>などと付与してremove_htmlモデファイアでカットする、カテゴリ名先頭へスペースを入れる、とかの対処法があったようなんだが、どれも好きではない。

本当はこの方法も嫌だ。

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4.1:カテゴリの並べ替え(カスタムフィールド+ハッシュ変数)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)