RIGHT:[[T4←>Mahara/プラグイン開発-T4]]  [[→T6>Mahara/プラグイン開発-T6]]

* T5-ブロックの削除 [#ic5a0d58]
* T5-ブロックインスタンスの削除 [#ic5a0d58]

前項までで作成したプラグインは、ページを編集状態にすると以下のような表示になる。

#ref(http://sumi.riise.hiroshima-u.ac.jp/skitch/simpleclock-t5-20130111-022649.png,,332x72)

×をクリックするとブロックが削除されるはずだが、実際に押してみるとエラーメッセージがでて削除できない。
×をクリックするとブロックインスタンスが削除されるはずだが、実際に押してみるとエラーメッセージがでて削除できない。

#ref(http://sumi.riise.hiroshima-u.ac.jp/skitch/simpleclock-t5-20130111-024654.png,900x100)

これは、アクセス履歴を残しているテーブル blocktype_simpleclock_visit が、削除しようとしたブロックのデータ (テーブル block_instance にある) を外部キーとして参照しているからである。削除にさきだち、blocktype_simpleclock_visit の該当レコードを削除しておかなくてはならない。
これは、アクセス履歴を残しているテーブル blocktype_simpleclock_visit が、削除しようとしたブロックインスタンスのデータ (テーブル block_instance にある) を外部キーとして参照しているからである。削除にさきだち、blocktype_simpleclock_visit の該当レコードを削除しておかなくてはならない。

このように、ブロック削除時になにか作業をしておく必要があるときは、delete_instance メソッドを定義し、その中に記述する。
このように、ブロックインスタンス削除時になにか作業をしておく必要があるときは、delete_instance メソッドを定義し、その中に記述する。

*** delete_instance [#z8a15df6]
 public static function delete_instance(BlockInstance $instance) {
   delete_records('blocktype_simpleclock_visit', 'blockinstance', $instance->get('id'));
 }

delete_records 関数は、テーブルから条件に合う行を削除する。一つ目の変数に指定したテーブルから、二つ目の変数に指定したフィールドの値が三つ目の引数と同じになるようなレコードを削除する。

これで削除できるようなった。

ここまでのファイル: &attachref(simpleclock-t5.zip);

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS