► Automatic Class Loading
• 一對一 callbacks 列表
• 類別命名規則
核心類必須以前綴 core_ 開頭
插件類名稱必須以 plugintype_pluginname_ 之類的名稱開頭。例如:mod_forum_(以/ mod / forum為例)
每個類獨立一個檔案
類檔案名不含前綴名稱
例如,mod_forum_some_class 文件存儲在 mod/forum/classes/some_class.php中
例如,核心類 core_frankenstyle 文件存儲在 lib/classes/frankenstyle.php中
引用範例
模組內一個 mod_forum_some_class
核心類必須以前綴 core_ 開頭
插件類名稱必須以 plugintype_pluginname_ 之類的名稱開頭。例如:mod_forum_(以/ mod / forum為例)
每個類獨立一個檔案
類檔案名不含前綴名稱
例如,mod_forum_some_class 文件存儲在 mod/forum/classes/some_class.php中
例如,核心類 core_frankenstyle 文件存儲在 lib/classes/frankenstyle.php中
引用範例
模組內一個 mod_forum_some_class
<?php //檔案位置 mod/forum/classes/myclass.php class mod_forum_myclass { }
模組內自行引用此類 如mod/forum/lib.php
<?php // no require_once() necessary here $instance = new mod_forum_some_class();
其他地方引用此類
<?php if (class_exists('mod_forum_some_class')) { // do something }
• Namespace 命名空間 :名稱則匹配到相應目錄內 classes 子目錄下
核心類
<?php namespace core\event; // file lib/classes/event/base.php class base { }
模組類
<?php namespace mod_forum\event; // file mod/forum/classes/event/post_read.php class post_read extends \core\event\base { }
引用
► Callback<?php // in any file \mod_forum\event\post_read::create($post->id, ...)->trigger();
Moodle沒有明確定義的Hooks API,但仍允許插件通過實現callback掛接到不同的進程中。參閱組件之間的通信
• 一對多 callback 列表
Callback | Plugin type | Version | Comments |
---|---|---|---|
Navigation, see Navigation API | |||
extend_navigation_course | * | before Moodle 3.0 was only supported by report and tool plugin types | |
extend_settings_navigation | local, booktool | Note, modules have a one-to-one callback with the same name, see below | |
extend_navigation | local | Note, modules have a one-to-one callback with the same name, see below | |
extend_navigation_user_settings | * | 3.0+ | before Moodle 3.0 was only supported by tool plugin types |
extend_navigation_category_settings | * | 3.0+ | |
extend_navigation_frontpage | * | 3.1+ | |
extend_navigation_user | * | 3.1+ | |
Before-actions hooks | |||
course_module_background_deletion_recommended | * | 3.2+ | see upgrade.txt |
pre_block_delete | * | 3.1+ | |
pre_course_category_delete | * | 3.1+ | |
pre_course_delete | * | 3.1+ | |
pre_course_module_delete | * | 3.1+ | |
pre_user_delete | * | 3.1+ | |
Login_callbacks | |||
after_config | * | 3.8+ | Triggered as soon as practical on every moodle bootstrap after config has been loaded. The $USER object is available at this point too. |
after_require_login | * | 3.7+ | eg Add permissions logic across a site or course |
check_password_policy | * | 3.6+ | |
print_password_policy | * | 3.8+ (WIP) | |
pre_signup_requests | * | 3.5 | eg to do actions before sign up such as acceptance of policies, validations, etc |
extend_change_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the change password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
extend_set_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the set password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
extend_forgot_password_form | * | 3.8+ (WIP) | eg Injecting form elements into the forgot password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
extend_signup_form | * | 3.8+ (WIP) | eg Injecting form elements into the signup form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
validate_extend_change_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the change password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
validate_extend_set_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the set password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
validate_extend_forgot_password_form | * | 3.8+ (WIP) | eg Adding additional validation to the forgot password form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
validate_extend_signup_form | * | 3.8+ (WIP) | eg Adding additional validation to the signup form. Note: This hook is not compatible with the Webservices API or the Moodle mobile app. See MDL-66173 and MOBILE-3181 for more info. |
post_change_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user changes password. |
post_set_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user resets password. |
post_forgot_password_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user submits a password reset request. |
post_signup_requests | * | 3.8+ (WIP) | eg Fire additional actions after a user creates an account. |
Page rendering, see Output_callbacks | |||
add_htmlattributes | * | 3.3+ | eg Add open graph xml namespace attributes |
before_footer | * | 3.3+ | eg injecting JS across the site, like analytics |
before_http_headers | * | 3.3+ | Setting http headers across the site like CSP |
before_standard_html_head | * | 3.3+ | A better API alternative to appending to $CFG->additionalhtmlhead |
before_standard_top_of_body_html | * | 3.3+ | |
render_navbar_output | * | 3.2+ | |
Course module edit form | |||
coursemodule_edit_post_actions | * | 3.1+ | |
coursemodule_standard_elements | * | 3.1+ | |
coursemodule_validation | * | 3.1+ | |
Modules | |||
check_updates_since | mod | 3.2+ | See NEWMODULE_Documentation |
dndupload_register | mod | ||
Admin | |||
bulk_user_actions | * | 3.9+ | Any plugin typically an admin tool can add new bulk user actions |
Other | |||
get_fontawesome_icon_map | * | 3.3+ | https://docs.moodle.org/dev/Moodle_icons#Font_awesome_icons |
get_question_bank_search_conditions | local | ||
oauth2_system_scopes | * | 3.3+ | |
rss_get_feed | * | ||
supports_logstore | report | ||
get_shortcuts | ltisource | 3.1+ | |
before_launch | ltisource | 2.8+ | |
control_view_profile | * | 3.6+ | |
store_profiling_data | * | 3.6+ | |
override_webservice_execution | * | 3.6+ | |
Deprecated | |||
cron | * | See Task API | |
delete_course | mod,report, coursereport,format |
Replace with observer to course_contents_deleted event | |
print_overview | mod | up to 3.2 | New dashboard uses Calendar API to populate events on the timeline |
report_extend_navigation | coursereport | Plugin type coursereport is deprecated, plugin type report should be used instead |
• 一對一 callbacks 列表
Callback | Plugin type | Version | Comments |
---|---|---|---|
Comments support, see Comment API | |||
comment_add | * | ||
comment_display | * | ||
comment_permissions | * | ||
comment_template | * | ||
comment_url | * | ||
comment_validate | * | ||
Gradebook | |||
export_%_settings_definition | gradeexport | % is a plugin name without prefix | |
import_%_settings_definition | gradeimport | % is a plugin name without prefix | |
report_%_profilereport | gradereport | % is a plugin name without prefix | |
report_%_settings_definition | gradereport | % is a plugin name without prefix | |
Groups support, see Groups API | |||
allow_group_member_remove | * | ||
restore_group_member | * | For plugins that create their own groups | |
Installation and upgrade | |||
xmldb_%_install | * | Located in db/install.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_install_recovery | * | Located in db/install.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_uninstall | * | Located in db/uninstall.php , % refer to the full plugin name, in case of modules without prefix | |
xmldb_%_upgrade | * | Located in db/upgrade.php , % refer to the full plugin name, in case of modules without prefix | |
LTI source | |||
add_instance_hook | ltisource | ||
messagetype | ltisource | Callback name is the type of the message | |
Question bank support, see Question API | |||
question_pluginfile | * | ||
question_preview_pluginfile | * | ||
questions_in_use | * | since 3.7.5, 3.8.2 (previously only "mod") | |
Ratings support, see Rating API | |||
rating_can_see_item_ratings | * | 2.9.2+ | |
rating_can_see_item_ratings | * | 2.9.2+ | |
rating_get_item_fields | * | ||
rating_permissions | * | ||
rating_validate | * | ||
Themes | |||
$THEME->csspostprocess | theme | ||
$THEME->extralesscallback | theme | ||
$THEME->lessvariablescallback | theme | ||
page_init | theme | ||
Modules: Calendar and dashboard | |||
core_calendar_event_action_shows_item_count | mod | 3.3+ | |
core_calendar_is_event_visible | mod | 3.3+ | |
core_calendar_provide_event_action | mod | 3.3+ | |
Modules: Course cache | |||
cm_info_dynamic | mod | ||
cm_info_view | mod | ||
get_coursemodule_info | mod | ||
Modules: Course reset | |||
reset_course_form_defaults | mod | ||
reset_course_form_definition | mod | ||
reset_userdata | mod | ||
Modules | |||
delete_instance | mod | ||
dndupload_handle | mod | ||
export_contents | mod | Used in WS get_course_contents | |
extend_settings_navigation | mod,booktool | ||
extends_navigation | mod | ||
get_completion_active_rule_descriptions | mod | 3.3+ | Must be present for modules implementing custom completion rules |
get_completion_state | mod | ||
get_extra_capabilities | mod | ||
get_file_areas | mod | ||
get_recent_mod_activity | mod | ||
get_shortcuts | mod | 3.1+ | |
grade_item_update | mod | ||
grading_areas_list | mod | ||
print_recent_activity | mod | ||
print_recent_mod_activity | mod | ||
refresh_events | mod | ||
rescale_activity_grades | mod | 3.1+ | |
scale_used_anywhere | mod | ||
update_grades | mod | ||
user_complete | mod | ||
user_outline | mod | ||
Glossary formats | |||
glossary_print_entry_% | for glossary formats | Glossary formats is not a plugin type yet, however the list of formats is not hardcoded in the mod_glossary, instead the methods similar to callbacks are used for each subfolder in mod/glossar/format. % refer to the subfolder name, the functions are expected in lib.php | |
glossary_show_entry_% | for glossary formats | - " - | |
glossary_show_entry_% | for glossary formats | - " - | |
glossary_show_entry_% | for glossary formats | - " - | |
Other | |||
global_db_replace | block | ||
inplace_editable | * | See Inplace editable | |
output_fragment_* | * | 3.1+ | see Fragment |
page_type_list | * | Used when displaying page types in block configuration | |
params_for_js | atto | ||
pluginfile | * | Callback checking permissions and preparing the file for serving plugin files, see File API. Note, in case of block plugins the list of arguments is slightly different | |
restore_role_assignment | * | For plugins that create their own role assignments | |
strings_for_js | atto | ||
supports | * | Required for activity modules | |
Deprecated | |||
ajax_section_move | format | up to 2.3 | See Course formats |
ajax_support | format | up to 2.3 | See Course formats |
delete_course | mod | up to 3.1 | use event observer |
display_content | format | up to 2.3 | See Course formats |
get_post_actions | mod,booktool | Only called if legacy log is used on the site | |
get_section_name | format | up to 2.3 | See Course formats |
get_section_url | format | up to 2.3 | See Course formats |
get_types | mod,ltisource | up to 3.0 | Replaced with get_shortcuts in 3.1 |
get_view_actions | mod,booktool | Only called if legacy log is used on the site | |
load_content | format | up to 2.3 | See Course formats |
scale_used | mod | up to 3.0 | |
uses_sections | format | up to 2.3 | See Course formats |
question_list_instances | mod | up to 3.8 | Use "questions_in_use" instead |