Список хуков LiveStreet CMS 1.0.1
На днях написал черновик по списку хуков и так забыл о нем, пока не увидел новое видео от Максима и сразу вспомнил об этом тексте, решив под общий шумок вокруг хуков добавить и эту статью. Я видел разные топики, где спрашивали "есть ли список хуков?". Да, есть. Вот он.
Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть их них автоматически формируется ядром движка.
Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.
Как видим — первым хуком стартует модуль хуков module_Hook_init_after, который срабатывает сразу после инициализации механизма хуков :)
Хуки, которые начинаются на
Это кросспост из гида по ЛС.
Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть их них автоматически формируется ядром движка.
Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.
module_Hook_init_after
module_Plugin_init_before
module_Plugin_init_after
module_Cache_init_before
module_Cache_init_after
module_Security_init_before
module_Security_init_after
module_Session_init_before
module_Session_init_after
module_Lang_init_before
lang_init_start
module_Viewer_init_before
viewer_init_start
module_Viewer_init_after
module_viewer_assign_before
module_viewer_assign_after
module_Lang_init_after
module_Message_init_before
module_session_get_before
module_session_get_after
module_Message_init_after
module_User_init_before
module_Database_init_before
module_Database_init_after
module_database_getconnect_before
module_database_getconnect_after
module_cache_get_before
module_cache_get_after
module_cache_set_before
module_cache_set_after
module_Geo_init_before
module_user_getusercurrent_before
module_user_getusercurrent_after
module_Geo_init_after
module_geo_gettargetsbytargetarray_before
module_geo_gettargetsbytargetarray_after
module_cache_clean_before
module_cache_clean_after
module_User_init_after
engine_init_complete
init_action
module_Ls_init_before
module_Ls_init_after
module_ls_senderrun_before
module_ls_senderrun_after
action_init_actionindex_before
module_Topic_init_before
module_Topic_init_after
module_topic_getcounttopicscollectivenew_before
module_Blog_init_before
module_Blog_init_after
module_blog_getaccessibleblogsbyuser_before
module_blog_getaccessibleblogsbyuser_after
module_topic_getcounttopicscollectivenew_after
module_topic_getcounttopicspersonalnew_before
module_topic_getcounttopicspersonalnew_after
action_init_actionindex_after
action_event_index_before
module_viewer_sethtmlrssalternate_before
module_viewer_sethtmlrssalternate_after
module_viewer_sethtmlcanonical_before
module_viewer_sethtmlcanonical_after
module_topic_gettopicsgood_before
module_lang_get_before
module_lang_get_after
module_user_getusersadditionaldata_before
module_user_getusersadditionaldata_after
module_blog_getblogsadditionaldata_before
module_blog_getblogsadditionaldata_after
module_Vote_init_before
module_Vote_init_after
module_vote_getvotebyarray_before
module_vote_getvotebyarray_after
module_Favourite_init_before
module_Favourite_init_after
module_favourite_getfavouritesbyarray_before
module_favourite_getfavouritesbyarray_after
module_topic_gettopicsgood_after
topics_list_show
module_viewer_makepaging_before
module_viewer_makepaging_after
action_event_index_after
action_shutdown_actionindex_before
action_shutdown_actionindex_after
module_session_getid_before
module_session_getid_after
module_session_set_before
module_session_set_after
module_Talk_init_before
module_Talk_init_after
module_talk_getcounttalknew_before
module_talk_getcounttalknew_after
module_topic_getcountdrafttopicsbyuserid_before
module_topic_getcountdrafttopicsbyuserid_after
module_viewer_display_before
template_html_head_begin
template_html_head_end
module_viewer_addblock_before
module_viewer_addblock_after
template_body_begin
template_write_item
template_container_class
template_header_banner_begin
template_main_menu_item
template_main_menu
template_userbar_nav
template_userbar_stat_item
template_userbar_item_first
template_userbar_item_last
template_header_banner_end
template_menu_blog
template_wrapper_class
module_viewer_getblocks_before
module_viewer_getblocks_after
module_Comment_init_before
module_Comment_init_after
module_comment_getcommentsonline_before
module_blog_getinaccessibleblogsbyuser_before
module_blog_getinaccessibleblogsbyuser_after
module_topic_gettopicsadditionaldata_before
module_topic_gettopicsadditionaldata_after
module_comment_getcommentsonline_after
module_viewer_getlocalviewer_before
module_lang_getlangmsg_before
module_lang_getlangmsg_after
module_viewer_getlocalviewer_after
template_block_stream_nav_item
module_topic_getopentopictags_before
module_topic_getopentopictags_after
module_Tools_init_before
module_Tools_init_after
module_tools_makecloud_before
module_tools_makecloud_after
template_block_tags_nav_item
module_blog_getblogsrating_before
module_blog_getblogsrating_after
template_menu_blog_index_item
template_content_begin
module_topic_isallowtopictype_before
module_topic_isallowtopictype_after
template_topic_content_begin
template_topic_content_end
template_block_topic_share
template_topic_show_vote_stats
template_topic_show_info
template_content_end
template_footer_menu_user_item
template_footer_menu_navigate_item
template_copyright
template_footer_end
template_body_end
module_database_getstats_before
module_database_getstats_after
module_cache_getstats_before
module_cache_getstats_after
module_viewer_fetch_before
template_statistics_performance_begin
template_statistics_performance_item
template_statistics_performance_end
module_viewer_fetch_after
module_viewer_display_after
Как видим — первым хуком стартует модуль хуков module_Hook_init_after, который срабатывает сразу после инициализации механизма хуков :)
Хуки, которые начинаются на
- module_ — это хуки вызова методов модулей и для каждого модуля вызывается два хука:
module_ИМЯМОДУЛЯ_МЕТОД_before module_ИМЯМОДУЛЯ_МЕТОД_after
т.е. до и после вызова метода.
- хуки без префикса, как, например
— это обычные стандартные хуки, которые явно прописаны в коде и найти их можно путем поиска по файлам движка.lang_init_start
- action_ — хуки, которые запускаются при выполнении определенного экшена (ответа за запрос действия). Могут запускаться рекурсивно при редиректе с одного экшена на другой (следует это учитывать при разработке своего кода). Эти хуки тоже запускаются в определенном порядке: есть вызов до и после методов, поочередно для инициализации екшена, для эвента екшена и для завершения екшена, вычислить который несложно, взглянув на вышеуказанный список.
- template_ — хуки, которые прописаны в шаблоне, только без самого префикса template_, но привязываться к ним нужно используя этот префикс.
Это кросспост из гида по ЛС.
23 комментария
Узнать, в каком порядке активировались плагины, элементарно — достаточно посмотреть в файл plugins.dat
Если говорить именно о решении, то оно, разумеется, сложнее. Как пример: плагин aceAdminPanel у меня ВСЕГДА активируется первым (даже, если до него какие-то другие плагины были активированы), а aceBlogExtender активируется всегда последним
А так — после:
Дописываю плагин антиспам. В момент ввода ящика нужна проверка по базе спамеров.
Реализовал через переопределение сущности Email.