mtde.info

Movable Type Developers Express

数値のゼロ埋め

2008年2月 3日 12:05 | Writer: apstar | 記事本文

Movable Typeでは、カテゴリなどを並べ替える際にIDを利用すると、数値が文字列として評価されてしまい、並び順が意図したとおりにならないことが多々あります。

下記コードはカテゴリIDをキーに、カテゴリラベルをデータとしハッシュを生成、MTLoopで結果を並べるサンプルですが、MTLoopへsort_by="key"モデファイアを指定しても、カテゴリIDが1桁・2桁・3桁と混在すると、並び順が思うようにいかないです。これはMTLoopのsort_byモデファイアで並べ替えに用いられるキー(カテゴリID)が文字列で扱われているためです。

<MTCategories>
   <MTSetvarBlock name="keyvalue"><$MTCategoryID$></MTSetvarBlock>
   <MTSetvarBlock name="ShowCategory" key="$keyvalue"><$MTCategoryLabel$></MTSetvarBlock>
</MTCategories>

<MTLoop name="ShowCategory" sort_by="key">
   <p><$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$></p>
</MTLoop>

1から20までのIDがある場合は、以下のように並びます。

これを改善するには、keyvalueキーへMTCategoryID取得・代入時にzero_pad="N"(Nは任意の桁数)としてゼロ埋め・桁あわせをするのが一番簡単です。こうすると、キーのIDが文字列評価されても正しく並べ替えされます。

<MTCategories>
   <MTSetvarBlock name="keyvalue"><$MTCategoryID zero_pad="4"$></MTSetvarBlock>
   <MTSetvarBlock name="ShowCategory" key="$keyvalue"><$MTCategoryLabel$></MTSetvarBlock>
</MTCategories>

<MTLoop name="ShowCategory" sort_by="key">
   <p><$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$></p>
</MTLoop>

1から20までのIDがある場合は、以下のように並びます。

Tips系

2008 mtde.info