PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 6 > カテゴリ一覧を記事数の多い順からソートして表示する

2024年05月15日

カテゴリ一覧を記事数の多い順からソートして表示する

PowerCMS 6 の内容です。
カテゴリの一覧は以下のコードで出力できます。


<mt:Categories>
    <a href="<mt:CategoryArchiveLink>"><mt:CategoryLabel></a>(<mt:CategoryCount>)<br>
</mt:Categories>

結果は以下になります。カッコの中はカテゴリの記事件数です。CategoryCount で件数表示ができます。
※コードの中に自動リンクが機能していて見づらい状態となり申し訳ないです。


DynamicMTML(37)
PowerCMS 2(20)
PowerCMS 3(43)
PowerCMS 4(82)
PowerCMS 5(73)
PowerCMS 6(37)
PowerCMS 8341(22)
PowerCMS X(9)
PowerCMSクラウド(14)
PowerSync(5)
VisitorAnalytics(1)
その他(39)
イベント・セミナー情報(41)
サイト制作全般(39)
サポート(101)
テンプレート作成Tips(71)
トラブルシューティング(28)
プラグイン(93)
リリース&Update情報(10)
伝えるウェブ(8)
技術情報(138)
設定・管理画面カスタマイズ(46)

このコードをカテゴリカウントの多い順でソートさせたい時に、mt:Categories の sort_by に count の用意がないので、ひと手間必要になります。

以下のコードを丸ごとコピーすればカテゴリ数の多い順で表示できます。


<mt:Categories>
  <mt:setvarblock name="cat_key">key_<mt:CategoryCount zero_pad="8">_<mt:categoryid zero_pad="8"></mt:setvarblock>
  <mt:setvarblock name="cat_loop" key="$cat_key">
    <a href="<mt:CategoryArchiveLink>"><mt:CategoryLabel></a>(<mt:CategoryCount>)<br>
  </mt:setvarblock>
</mt:Categories>
<mt:loop name="cat_loop" sort_by="key reverse"><mt:var name="__value__"></mt:loop>

結果は以下のようにカテゴリ数の多い順からソートができます。


技術情報(138)
サポート(101)
プラグイン(93)
PowerCMS 4(82)
PowerCMS 5(73)
テンプレート作成Tips(71)
設定・管理画面カスタマイズ(46)
PowerCMS 3(43)
イベント・セミナー情報(41)
サイト制作全般(39)
その他(39)
PowerCMS 6(37)
DynamicMTML(37)
トラブルシューティング(28)
PowerCMS 8341(22)
PowerCMS 2(20)
PowerCMSクラウド(14)
リリース&Update情報(10)
PowerCMS X(9)
伝えるウェブ(8)
PowerSync(5)
VisitorAnalytics(1)

実現するために配列を使いました。
setvarblock name="cat_key" のコード箇所で、事前に配列のキーを「カテゴリカウントにzero_pad を指定して桁数を揃えたもの」と「重複を避けるために桁数を揃えたカテゴリID」を変数に登録して、mt:loop の sort_by で順番を指定して出力しています。

mt:categoryid を登録する意味は、カウント数だけだと重複の値の場合(例 カテゴリAが5件、カテゴリBが5件の時)に上書きされるので、それを防ぐためユニークな値としています。
zero_pad は数字の桁数を揃えるためのモデファイアです。
それを setvarblock name="cat_loop" key="$cat_key" の箇所で配列のキーとして登録をし、値(value)は setvarblock タグの中に記述します。

setvarblock の中に value を記述するサンプルは公式リファレンスに記載がありませんが動作します。

サンプルです。


<mt:SetVarBlock name="bar" key="a"><$mt:EntryTitle$></mt:SetVarBlock>

zero_padで指定した桁を超える件数(1千万件とか無いと思いますが)があると、桁数が増えて順番がおかしくなるのでそこは注意が必要ですので、今登録されている桁数(例 zero_pad="3")を指定するのは止めておいた方が良いです。


カテゴリー
PowerCMS 6
投稿者
さとうせい

Recent Entries