Standing on the Shoulder of Linus

Home / 2011 / 12月 / 17 / Concrete5 の Events

Concrete5 の Events

Concrete5 では、events というフックが用意されています。Concrete5 の処理の途中に、利用者が独自に処理を追加することができます。(WordPress を使っている方は、アクションフックのようなもの、と考えてください)

処理が追加可能な場所は、ソースコード内で Events::fire が用意されている所です。

パッケージ等で、Events::extend と記述することで処理を追加します。

Events::extend('on_user_login', 'UserprofilePackage', 'on_user_login', 'packages/userprofile/controller.php');

フックする箇所(Events::fire が用意されている所)、(自分で追加する)クラス名、(クラスの)メソッド名、クラスのあるファイルパス、です。上の例では、on_user_login フックで、packages/userprofile/controller.php にある UserprofilePackage の on_user_login を実行します。

例えば、ログイン後、ユーザー名と同じ名前のページにリダイレクトする場合は、以下のようになります。(実運用では、リダイレクトさせるページが存在するかどうかのチェックを挟みますが、ここでは省略しています)

public function on_user_login($obj) {
		$u = new User();
		$obj->redirect('/'.$u->uName);
}

詳しく知りたい方は、How concrete5 Events work、またはConcrete5 Begginer’s Guideをごらんください。またEvent Tester というアドオンを利用すると、フックについて調べるのが楽になります。

Concrete5.5β では、以下のフックが用意されています (*.php を対象に文字列検索した結果です。抜けや重複等があるかもしれません)。

blocks/library_file/controller.php:				$ret = Events::fire('on_file_upload', $bf);
controllers/login.php:		Events::fire('on_user_login',$this);
dispatcher.php:		Events::fire('on_page_view', $c, $u);
libraries/view.php:				Events::fire('on_start', $this);
libraries/view.php:							Events::fire('on_before_render', $this);
libraries/view.php:							Events::fire('on_render_complete', $this);
libraries/view.php:				Events::fire('on_before_render', $this);
libraries/view.php:					$ret = Events::fire('on_page_output', $pageContent);
libraries/view.php:				Events::fire('on_render_complete', $this);
libraries/events.php:		// params coming at the end. e.g. if I fire Events::fire('on_login', $userObject) it will come in with user object first
models/file.php:		Events::fire('on_file_set_password', $this, $pw);
models/file.php:		Events::fire('on_file_add', $f, $fv);
models/file.php:		Events::fire('on_file_version_add', $fv);
models/file.php:		Events::fire('on_file_download', $fv, $u);
models/users_friends.php:		Events::fire('on_user_friend_add', $uID, $friendUID);
models/users_friends.php:		$ret = Events::fire('on_user_friend_remove', $uID, $friendUID);
models/job.php:		Events::fire('on_before_job_execute', $this);
models/job.php:		Events::fire('on_job_execute', $this);
models/job.php:			Events::fire('on_job_install', $j);
models/job.php:		Events::fire('on_job_install', $this);
models/job.php:		$ret = Events::fire('on_job_uninstall', $this);
models/collection_version.php:			Events::fire('on_page_version_add', $c, $nv);
models/collection_version.php:			Events::fire('on_page_version_approve', $c);
models/file_version.php:		Events::fire('on_file_version_duplicate', $fv2);
models/file_version.php:		Events::fire('on_file_version_update_title', $this, $title);
models/file_version.php:		Events::fire('on_file_version_update_tags', $this, $tags);
models/file_version.php:		Events::fire('on_file_version_update_description', $this, $descr);
models/file_version.php:		Events::fire('on_file_version_approve', $this);
models/file_version.php:		Events::fire('on_file_version_deny', $this);
models/user.php:			Events::fire('on_user_logout');
models/user.php:				Events::fire('on_user_enter_group', $this, $g);
models/user.php:				$ret = Events::fire('on_user_exit_group', $this, $g);
models/user_private_message.php:				Events::fire('on_private_message_marked_as_read', $this);
models/user_private_message.php:			$ret = Events::fire('on_private_message_delete', $this);
models/user_private_message.php:			Events::fire('on_private_message_marked_not_new', $this);
models/user_private_message.php:			Events::fire('on_private_message_over_limit', $offender);
models/userinfo.php:					Events::fire('on_user_add', $ui, $data['uPassword']);
models/userinfo.php:			$ret = Events::fire('on_user_delete', $this);
models/userinfo.php:				Events::fire('on_user_update', $ui);
models/userinfo.php:					Events::fire('on_user_change_password', $ui, $data['uPassword']);
models/userinfo.php:			Events::fire('on_user_validate', $this);
models/userinfo.php:				Events::fire('on_user_change_password', $this, $newPassword);
models/groups.php:			$ret = Events::fire('on_group_delete', $this);
models/groups.php:		        Events::fire('on_group_update', $this);
models/groups.php:				Events::fire('on_group_add', $ng);
models/page.php:		$icon = Events::fire('on_page_get_icon', $this);
models/page.php:		$ret = Events::fire('on_page_update', $this);
models/page.php:		$ret = Events::fire('on_page_move', $this, $oldParent, $newParent);
models/page.php:			$ret = Events::fire('on_page_duplicate', $nc2, $this);
models/page.php:		$ret = Events::fire('on_page_delete', $this);
models/page.php:			Events::fire('on_page_add', $pc);

関連

Posted in concrete5 | Tagged PHP, アドオン
← PHP5.3 の名前空間入門 WordPress フォーラムの投稿数をユーザー毎に集計する →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 問い合わせフォーム改善: 選択肢により条件分岐し、項目の表示非表示を変更する
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.