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