一覧画面のシステムフィルタプラグインの作成

オブジェクトの一覧画面の「フィルタ」=>「システムフィルタ」にカスタムフィルタを追加するプラグインを作成する方法を紹介します。

ここでは、今週公開予定の記事(直前の日曜日から次の土曜日まで)をフィルタリングする機能を実装します。

システムフィルタのモーダルに項目を追加

PluginStarterでのひな形の作成

PluginStarterでプラグインひな形を作成する 以下の内容を入力してプラグインひな形を作成します。

項目名 内容
名前 EntryFilterThisWeek
バージョン 1.0
作成者 Alfasado Inc.
作成者URL https://alfasado.net/
説明 Filter entries to be published this week.
説明(日本語) 今週公開予定の記事をフィルタリングします。

続いて「システムフィルタ」の左にある 追加 ボタンをクリックしてフィルタを1つ追加します。

キー モデル ラベル ラベル (日本語) 表示順
this_week 記事 To be published this week 今週公開予定の記事 100

プラグインひな形の入力項目は以上です。保存したら、エクスポートして、プラグインの ZIP ファイルをダウンロードしてください。

plugins/
 └ EntryFilterThisWeek/ (root)
   ├ config.json (定義ファイル)
   ├ EntryFilterThisWeek.php (プラグイン・クラス)
   ├ locale/
   │  └ ja.json (翻訳ファイル)
   └ docs/
      └ README.ja.md (ドキュメント)

EntryFilter.phpの以下の部分にコードを書きます。

    function filter_entry_this_week ( $app, &$terms, $model, $option, &$args, &$extra, &$ex_vals ) {
    }

$app は Prorotypeクラス、&$terms, &$args, &$extra, &$ex_vals がPADOの loadメソッドに渡すフィルタ条件です。

PHPの date関数で週の開始日時(日曜日)、週の終了日時(土曜日)を取得して、published_onカラムをBETWEENで範囲指定、ステータス公開・終了以外、という条件を指定しています。

    function filter_entry_this_week ( $app, &$terms, $model, $option, &$args, &$extra, &$ex_vals ) {
        $today = date( 'D' );
        $last_sunday = $today === 'Sun' ? date( 'Y-m-d 00:00:00' ) : date( 'Y-m-d H:i:s', strtotime( 'Last Sunday') );
        $next_saturday = $today === 'Sat' ? date( 'Y-m-d 23:59:59' ) : date( 'Y-m-d 23:59:59', strtotime( 'Next Saturday') );
        $terms['published_on'] = ['BETWEEN' => [ $last_sunday, $next_saturday ] ]; // 日曜日から土曜日まで
        $max_status = 4;
        if ( $workspace_id = $app->param( 'workspace_id' ) ) {
            $max_status == $app->max_status( $app->user(), $app->param( '_model' ), $workspace_id );
            if ( $max_status < 4 ) {
                $max_status++;
            }
        }
        $terms['status'] = ['<' => $max_status ]; // ステータスが公開・終了以外
    }

サンプルプラグインのダウンロード