[ Movable Type ]

プラグインを使わずにカテゴリ並び替え[regex_replace] (Movable Type5)

カテゴリ(フォルダ)を並び替えると言えば。
藤本 壱さんのSuperSort
CategoryLabelの頭N文字を削除するプラグインなんかが有名ですよね。

たまに制作現場で、「プラグインをインストールしてはいけない」とかいう
とんでも案件に出会ったりします。←出会ったりしました嫌な感じ

その経験を基にMT4.1以降だと動くはずな方法です。

古いMovable Typeから4.01以降に乗り換えた場合、
上記のプラグインなどでカテゴリの順番を並び替えていたりする人も
いるのではないでしょうか。

01_カテゴリ1
02_カテゴリ2
03_カテゴリ3
04_カテゴリ4
05_カテゴリ5

こんな感じに。

この方法だとMTはカテゴリ名の文頭の数値によって昇順に並びます。

しかし、このままだと不要なNN_が残ってしまっていかにも不細工です。
かといってプラグインは使えない状況(という話です。)

そこでこの方法

MT4.01以上のグローバル・モディファイア
regex_replaceを使って頭の数字部分をを置換してしまいます。

<mt:Ignore><!-- 正規表現を変数に格納 --></mt:Ignore>
<mt:Var name='re' value='/^[\d]{2}_(.+)/'>
<mt:TopLevelCategories>
<mt:SubCatsIsFirst><ul><mt:SubCatsIsFirst>
<mt:Ignore><!-- 正規表現でカテゴリ名の頭のxx_を置換 --></mt:Ignore>
<li>
<a href="<mt:CategoryArchiveLink />"><mt:CategoryLabel regex_replace='$re','$1' /></a>
</li>
<mt:SubCatsIsLast></ul></mt:SubCatsIsLast>
</mt:TopLevelCategories>

これだけでカテゴリリストからきれいさっぱり
頭の数字が取れます。

エントリーの最古の1件を常に一番下に表示したい。

なんだかよくわからないタイトルになってしまいましたが・・汗

エントリーリストで、一番古いエントリーをなんらかの理由でリストの最後に常に表示させておきたいときの
備忘録。

<mt:Ignore><!--
最古の1件を取得して oldest_entry に、格納
--></mt:Ignore>
<mt:Entries sort_order="ascend" limit="1" setvar='oldest_entry'>
<p style="color:#990000; font-weight:bold;"><mt:EntryTitle /></p>
</mt:Entries>
<mt:Ignore><!--
最大エントリー数から1件引いた分だけ表示
--></mt:Ignore>
<mt:BlogEntryCount setvar='total_entries' />
<mt:SetVar name='sub_entreis' value='$total_entries' />
<mt:SetVar name='sub_entreis'  op='--' />
<mt:Entries lastn="$sub_entreis">
<p><mt:EntryTitle /><mt:Var sub_entreis /></p>
</mt:Entries>
<mt:Var oldest_entry />

まず、エントリーを昇順に並び替え、最古の1件だけ取得し適当な変数に格納しておく。(ここではoldest_entry)

次にトータルのエントリー数から1引いた数だけエントリーを出力(ここは降順)

最後にoldest_entryをエントリーリストの最後にはっつけて完成。

こんなもんでしょうか。

MT5のコメントまわりの備忘録1

本サイトを制作している段階において
コメント周り、特にコメントのページネーションスクリプトの仕様が分からなくて
かなり悩まされました。

一応は分かったのですが・・・

ぶっちゃけこの仕様はどうなのか?

コメントのページネーションを作動させるためには
まず「コメント一覧」システムテンプレートが必要です。
JSONになっていてコメント一覧を内部的にテキスト出力してる・・感じですか?

そしてすごく大事なのが・・
ついついデザイン上ページネーション部分を下だけでいいやと

#top-comment-nav 部分をとっぱらってました。
上部のページネーション表示ですね。

javascriptエラーがでて
必要な引数が定義されていないと・・

#top-comment-nav をつけることで解消されましたが
いまだ謎が多いコメント部分

まだ完成には時間がかかりそうな悪寒です。

TopLevelCategories でしましま(Movable Type 5)

TopLevelCategoriesタグには、__odd__,__even__,__last__,__first__などのループに関する処理が含まれていないためカテゴリーリストでしましまにしたいなと思ったときにちょっと不便です。

そこで、TopLevelCategoriesのループ内で番号を振って奇数、偶数を判断したいと思います。

<mt:setVar cat_number value='1' />
<mt:topLevelCategories>
 <mt:subCatIsFirst><ul></mt:subCatIsFirst>
  <mt:setVar cat_number op='++' />
   <li class="<mt:if test='$cat_number%2==1'>even<mt:else>odd</mt:if>">
    <mt:if tag="categoryCount">
     <a href="<mt:categoryArchiveLink />"><mt:categoryLabel /></a>
    <mt:else><mt:categoryLabel /></mt:if></li>
  <mt:subCatIsLast></ul></mt:subCatIsLast>
</mt:topLevelCategories>

TopLevelCategoriesのループに入る前に<mt:setVar cat_number value='1' />カテゴリのループ回数を格納する変数を初期化
TopLevelCategories 内でカテゴリの呼び出しを行うたびに<mt:setVar cat_number op='++' />
呼び出されたカテゴリのインデックスとして変数に1足してtest アトリビュートで演算、
トップレベルカテゴリの総数を2で割った余りが1(1から開始してるので一つ目のカテゴリが2~となるので)なら偶数、1以外なら奇数となります。