October CMSの一覧画面で「今年」のデータでフィルターする

October CMSの一覧画面で「今年」のデータでフィルターする際の実装例をご紹介致します。

環境

Laravel:5.5
October CMS:1.0
MySQL:5.7.23

前提

October CMSの一覧画面では標準でフィルター機能が提供されています。
これにより、手軽に一覧画面にフィルター機能が実装できます。
以下のOctober CMSの公式ドキュメントに詳しく載っています。

https://octobercms.com/docs/backend/lists#list-filters

今回やりたいこと

October CMSの一覧画面で「今年」のデータでフィルターしたい。
フィルタータイプの「date」や「daterange」でも日付関連のフィルターは可能なのですが、フィルタータイプの「checkbox」でチェックするだけで「今年」でフィルターできるようにしたい。

「checkbox」でフィルターすることで
・検索範囲をカレンダーから選択する必要がなく、オペレーションが少ない
・「今年」でフィルター適用されているのが視覚的にわかりやすい
などのメリットがあります。

※「daterange」と「checkbox」のフィルターイメージ

実装の流れ

1.一覧画面の実装

まずは一覧画面を実装する必要があります。
以下のOctober CMSの公式ドキュメントに詳しく載っています。

https://octobercms.com/docs/backend/lists

2.フィルターの実装

「今年」のデータでフィルターできるように実装を進めていきます。
フィルターを定義するyamlファイルに以下のように記述します。

created_at:
    label: 今年のデータを表示
    type: checkbox
    default: 1
    conditions: YEAR(created_at) = YEAR(NOW())

上記の「conditions」にSQLのWHERE句がそのまま記述できます。
上記だと、チェックボックスをONにすると作成日時のカラムに対して「今年」でフィルターされます。

また「default」を設定することで当該画面に遷移した際に最初からフィルターを適用させることも可能です。

3.機能の確認

一覧画面で対象フィルターをチェックONすると、作成日時が「今年」のデータのみが一覧表示されました。

その他実装例

フィルターの条件にSQLがそのまま記述できるので、他の実装例もいくつか挙げてみます。

「今日」でフィルター

conditions: DATE(created_at) = DATE(NOW())

「今日より前」でフィルター

conditions: DATE(created_at) < DATE(NOW())

「今月」でフィルター

conditions: DATE_FORMAT(created_at, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')

おわりに

フィルタータイプの「date」や「daterange」でカレンダーから日付の範囲を選択してフィルターすることも可能ですが、「基本的に『今年』のしか一覧で見ない」というケースでは今回のようなフィルターの方が重宝する場合があるのではないかと思います。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です