PowerCMS™

よくあるご質問

ホーム > よくあるご質問 > テンプレートのカスタマイズ > 一覧表示を行う場合に sort_by へ指定できない順序や複…

一覧表示を行う場合に sort_by へ指定できない順序や複数のソート条件で出力できますか

標準でも sort_by の指定やグループの並べ替えによって出力順を制御できますが、sort_by に対応していなかったり複数の条件で一覧出力したい場合、ハッシュを使うことで出力順を制御できます。

ハッシュのキーを工夫することで、複数のソート条件を持たせたり、昇順と降順を組み合わせるなど複雑やソートも実現できます。
下記は、公開日とカスタムフィールドの値、複数の条件で記事を一覧出力するサンプルです。

以降、次の前提で説明致します。

  • 記事にカスタムフィールドが設定されている
    • 名前 = 優先順位
    • 種類 = テキスト
    • タグ名 = MTCFEntryPriority
  • カスタムフィールドには数字が入力される
  • 出力順の規則
    • 記事の公開日 (年月日) が新しい順に出力する
    • 記事の公開日 (年月日) が同じ場合、カスタムフィールド「優先順位」の値が小さいものを優先する

上記の前提の場合、次のようなテンプレートで実現可能です。

テンプレート例

<MTEntries>
    <$MTTemplateNote value="ハッシュのキー (hash_entries_key) は MTEntryDate (記事の公開日) と MTCFEntryPriority (記事の優先順位)と MTEntryID (記事の ID)を繋げた値を使う"$>
    <MTSetVarblock name="hash_entries_key"><$MTEntryDate format="%Y/%m/%d"$>-<$MTCFEntryPriority zero_pad="4"$>-<$MTEntryID zero_pad="8"$></MTSetVarblock>
    <$MTTemplateNote value="ハッシュ (hash_entries) の中へ格納する"$>
    <MTSetVarblock name="hash_entries" key="$hash_entries_key"><a href="#"><MTEntryTitle escape="html"></a></MTSetVarblock>
</MTEntries>

<MTLoop name="hash_entries" sort_by="key">
<MTIf name="__first__"><ul></MTIf>
    <li><-- <$MTVar name="__key__"$> --><$MTVar name="__value__"$></li>
<MTIf name="__last__"></ul></MTIf>
</MTLoop>

出力例

<ul>
    <li><-- 2020/08/24-0005-00001695 --><a href="#">1番に表示されて欲しい記事</a></li>
    <li><-- 2020/08/25-0003-00005679 --><a href="#">2番に表示されて欲しい記事</a></li>
    <li><-- 2020/08/25-0100-00000093 --><a href="#">3番に表示されて欲しい記事</a></li>
</ul>

実装する場合の注意点

  • ハッシュのキーの桁数は揃える

ハッシュのキーは桁数を揃えた方がデバッグを行いやすくなり、テンプレート例では MTCFEntryPriority と MTEntryID タグに zero_pad を指定して桁を揃えています。

  • ハッシュのキーは重複しないように一意の値とする

テンプレート例では MTEntryID (記事の ID) をキーに含めることでキーを一意の値にしています。

  
更新日
2020年8月31日

この質問の関連カテゴリー

お問い合わせ

お問い合わせフォームがご利用できない場合は、以下のメールアドレスからも受け付けております。
contact@alfasado.jp

製品資料ダウンロード

パンフレットデータ、提案用資料などがダウンロードできます。