blogスタッフブログ
HOME > スタッフブログ > CMS > PowerCMS X >PowerCMS Xプラグイン開発の基礎:オブジェクト保存・削除コールバックの実装

PowerCMS Xプラグイン開発の基礎:オブジェクト保存・削除コールバックの実装

PowerCMS Xプラグインの中でも、オブジェクト保存・削除コールバックはよく実装する機能の一つです。コールバックを活用することで、PowerCMS Xの機能をさらに拡張し、ニーズに合わせた高度な管理機能を構築できます。

保存・削除コールバックとは

PowerCMS Xでは、データベース操作の前後に特定の処理を挿入するためにコールバックを利用します。これにより、PowerCMS Xのデフォルト動作を変更したり、追加処理を実装することが可能です。

記事やページ、フォームの投稿など、オブジェクト保存または削除時にカスタム処理を実行することで、サイト運用を効率的にできます。

保存・削除コールバック種別と実行タイミング

コールバック種別 実行タイミング 備考
save_filter オブジェクトの保存前(pre_saveより前) バリデーションなどに利用
pre_save オブジェクトの保存前(save_filterより後) 新規作成時はID未確定
before_save オブジェクトの生成後、DBにcommit前(pre_saveより後) 新規作成時にID確定済み
post_save オブジェクトの保存後(before_saveより後) DBにcommit後
post_save_clone オブジェクトの複製時
post_save_revision オブジェクトのリビジョン保存時
delete_filter オブジェクトの削除前(pre_deleteより前)
pre_delete オブジェクトの削除前(delete_filterより後)
post_delete オブジェクトの削除後(pre_deleteより後)

save_filter/delete_filter、pre_save/pre_delete、post_save/post_deleteは対になるコールバックで覚えやすいと思います。before_saveコールバックは少し特殊ですが、pre_saveコールバックとは新規作成時でもオブジェクトIDが取得できる違いがあります。

コールバックの登録

コールバックを有効にするには、PowerCMS Xプラグインとして登録する必要があります。以下はentryモデルに、pre_saveコールバックとpre_deleteコールバックを登録する例です。これにより、記事が保存または削除される際に、それぞれのコールバックが実行されます。

config.json

{
    "label": "Callback",
    "id": "callback",
    "component": "Callback",
    "description": "",
    "version": "0.1",
    "author": "",
    "author_link": "",
    "callbacks": {
        "callback_pre_save_entry": {
            "entry": {
                "pre_save": {
                    "component": "Callback",
                    "priority": 5,
                    "method": "pre_save_entry"
                }
            }
        },
        "callback_pre_delete_entry": {
            "entry": {
                "pre_delete": {
                    "component": "Callback",
                    "priority": 5,
                    "method": "pre_delete_entry"
                }
            }
        }
    }
}

上記プラグイン定義(config.json)ファイルは、プラグインのスケルトンの作成 (PluginStarterプラグイン)を活用すると手軽に作成できます。

Callback.php

<?php
require_once( LIB_DIR . 'Prototype' . DS . 'class.PTPlugin.php' );

class Callback extends PTPlugin {
    function __construct () {
        parent::__construct();
    }

    function pre_save_entry(&$cb, $app, &$obj, $original) {
        return true;
    }

    function pre_delete_entry(&$cb, $app, &$obj, $original) {
        return true;
    }
}

pre_save_entry/pre_delete_entryの返り値は以下の制御を行います。

  • return true; => 保存を継続して編集画面に遷移
  • return false; => 保存を中断して編集画面に遷移

return false; で保存を中断した際は、$cb['error'] にエラーメッセージを設定すると編集画面にエラーメッセージを挿入することができます。

保存コールバック

保存コールバックは、オブジェクトが保存される際に特定の処理を実行するためのものです。これには、オブジェクトが新たに作成されるときや既存のものが更新されるときの前後に発生する処理が含まれます。これにより、保存前にバリデーションを実行したり、保存時に関連情報へ反映したりすることができます。

例:フォームの投稿内容から記事を作成

以下の例では、フォーム投稿時に投稿内容(contactオブジェクト)から記事オブジェクトを作成しています。

function post_save_contact(&$cb, $app, &$obj, $original, $clone_org = null) {
    $form = $cb['form'];
    $workspace_id = $form->workspace_id;

    $app->get_scheme_from_db('entry');
    $entry = $app->db->model('entry')->new();
    $app->set_default($entry);
    $entry->title($app->param('question_title'));
    $entry->text($app->param('question_content'));
    $entry->save();

    return true;
}

削除コールバック

削除コールバックは、オブジェクトが削除される際に実行する処理を定義します。削除前にデータを検証したり、特定の条件に応じて削除操作のキャンセル、削除されたデータに関連する情報を保存・削除するなどで利用できます。

まとめ

PowerCMS Xの保存・削除コールバックを利用すると、保存や削除時に特定の処理を実行することができます。これにより、サイトの運用をより効率的にし、ニーズに合わせた高度な管理機能を構築することが可能です。

最近の記事

カテゴリ

アーカイブ

スタッフ別