PowerCMS™
現在、PHP の脆弱性に関する報道および発表に伴いお問い合わせが集中しており、回答まで通常よりもお時間を頂いております。ご理解とご協力をお願します。
[新着情報] PHP の重大な脆弱性(CVE-2026-109618、CVE-2026-109619)に関する対応のお願い を追加しました。
[新着情報] JVN#91153973 で注意喚起されている複数の脆弱性についてワークアラウンドの対策 (10月9日更新) を追加しました。
[よくあるご質問] リリースのお知らせなど PowerCMS 製品のメールマガジンを受け取るには? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > 技術情報 > Data APIのリスト取得内容をプラグインでカスタマイズする

2015年03月13日

Data APIのリスト取得内容をプラグインでカスタマイズする

今回ご紹介するプラグインは、アイテム(MT::Assetオブジェクト)のリストの一覧表示時に、IDが負(マイナス)のものを除外するというものです。Movable TypeでIDが負(マイナス)のアイテムが生成されることはありませんが、PowerCMSのリビジョン機能がアイテムのバージョン管理に対応しており、過去のリビジョンをプレビューする際にIDが負(マイナス)のアイテムが生成されます。

それらをJSONから除外するプラグインを作成します。

data_api_pre_load_filtered_list.(datasource名)というコールバックに対応するプラグインを作成する

Data APIでリストを返すエンドポイントに対してカスタマイズするには「dataapipreloadfiltered_list.」+「datasource名(というか、model名といった方が適切)」というコールバックに対応したプラグインをつくります。

記事なら、dataapipreloadfilteredlist.entry、ウェブページなら dataapipreloadfilteredlist.page、アイテムなら dataapipreloadfilteredlist.asset という感じです。今回は「dataapipreloadfilteredlist.asset 」コールバックに対応するプラグインを作成します。

name: DataAPIAssetFilter
id:   DataAPIAssetFilter
version: 0.1
author_name: Alfasado Inc.
author_link: http://alfasado.net/
description: <__trans phrase="DataAPIAssetFilter">
l10n_class: DataAPIAssetFilter::L10N
callbacks:
    data_api_pre_load_filtered_list.asset:
        -
            priority: 5
            handler: >
                sub {
                        my ( $cb, $app, $filter, $count_options, $cols ) = @_;
                        my $terms = $count_options->{ terms };
                        $terms->{ id } = { '>' => 0 };
                        $count_options->{ terms } = $terms;
                }

第4引数「$count_options」の->{ terms }をカスタマイズする

アイテムの一覧を取得するエンドポイントについては以下のページを参照ください。

アイテムの一覧を取得するエンドポイントへ以下のリクエストを送信したとき、

GET https://example.jp/mt/mt-data-api.cgi/v2/sites/1/assets

$count_options->{ terms }の内容は以下のようになっています。

{ 'blog_id' => '1', 'parent' => [ \'IS NULL', 0, '' ] }

termsのカスタマイズについては、以下のドキュメントを参照してください。

PowerCMSの次期バージョンでも、PowerCMSのオブジェクトのData APIへの対応を進めています。


カテゴリー
プラグイン
技術情報

Recent Entries