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);