Search
💻

그누보드 Hook (훅) 사용법 정리 및 이벤트 종류

그누보드 5.4 부터 도입된 훅 기능에 대해서 살펴보자

그누보드 훅 사용법

훅 기능은 간단히 말해서
그누보드 bbs/ 폴더를 수정하지 않고 중간에 코드를 삽입 할 수 있다는 것
방법은 extend/ 폴더에 php 파일을 넣어서 실행하는 형식 인 것이다.
<?php if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 add_event('event_name', 'adapt_theme', G5_HOOK_DEFAULT_PRIORITY, 4); function adapt_theme($params) { global $g5; // event_name에 맞는 파라미터를 받아옴 // 파라미터를 통해 원하는 작업을 한다. }
PHP
복사
파일에서 add_event() 함수를 통해서 event_name이라는 이름으로 함수를 등록한다.
등록된 함수는 그누보드가 실행 될때에
<?php # ... run_event('event_name', $params); # ...
PHP
복사
bbs/ 폴더안의 파일들을 살펴보면 위와 같이 run_event() 함수들이 있습니다.
run_event 함수의 첫번째 파라미터가 이벤트 이름이며 해당 이벤트로 등록된 함수를 순차적으로 실행시킵니다.
이벤트명은 미리 정의되어 있으며 이벤트 종류는 아래와 같다.

그누보드 훅(Hook) 이벤트 종류

파일명
이벤트 명
파라미터
설명
common.php
common_header
-
-
head.php
pre_head
-
-
tail.sub.php
tail_sub
-
-
adm/_common.php
admin_common
-
-
adm/board_copy_update.php
admin_board_copy_file
$bo_table, $target_table
-
adm/board_form_update.php
admin_board_form_update
$bo_table, $w
-
adm/board_list_update.php
admin_board_list_update
$act_button, $chk, $board_table, $qstr
-
adm/cache_file_delete.php
adm_cache_file_delete_before
-
-
adm_cache_file_delete
-
-
adm/config_form_update.php
admin_config_form_update
-
-
adm/member_form_update.php
admin_member_form_update
$w, $mb_id
-
adm/member_form.php
admin_member_form_add
$mb, $w, 'table'
-
admin_member_form_after
$mb, $w
-
adm/member_list_update.php
admin_member_list_update
$_POST['act_button'], $mb_datas
-
adm/theme_update.php
adm_theme_update
$theme, $_POST['set_default_skin']
-
adm/view.php
admin_request_handler_$call
$arr_query, $token
-
admin_get_page_$call
$arr_query, $token
-
bbs/delete_all.php
bbs_delete_all
$tmp_array, $board
-
bbs/delete_comment.php
bbs_delete_comment
$comment_id, $board
-
bbs/delete.php
bbs_delete
$write, $board
-
bbs/download.php
download_file_header
$file, $file_exist_check
-
bbs/good.php
bbs_good_before
$bo_table, $wr_id, $good
-
bbs_increase_good_json
$bo_table, $wr_id, $good
-
bbs_increase_good_html
$bo_table, $wr_id, $good, $href
-
bbs_good_after
$bo_table, $wr_id, $good
-
bbs/login_check.php
password_is_wrong
'login', $mb
-
login_session_before
$mb, $is_social_login
-
member_login_check
$mb, $link, $is_social_login
-
bbs/login.php
member_login_tail
$login_url, $login_action_url, $member_skin_path, $url
-
bbs/logout.php
member_logout
$link
-
bbs/memo_delete.php
memo_delete
$me_id, $row
-
bbs/memo_form_update.php
memo_form_update_before
$recv_list
-
memo_form_update_after
$member_list, $str_nick_list, $redirect_url, $_POST['me_memo']
-
memo_form_update_failed
$member_list, $redirect_url, $_POST['me_memo']
-
bbs/memo.php
memo_list
$kind, $unkind, $page
-
bbs/move_update.php
bbs_move_copy
$row2, $move_bo_table, $insert_id, $next_wr_num, $sw
-
bbs_move_update
$bo_table, $chk_bo_table, $wr_id_list, $opener_href
-
bbs/move.php
move_html_footer
-
-
bbs/new_delete.php
bbs_new_delete
$chk_bn_id, $save_bo_table, $save_wr_id
-
bbs/password_check.php
password_is_wrong
'bbs', $wr, $qstr
-
bbs/password_lost_certify.php
password_lost_certify_before
-
-
password_lost_certify_after
$mb, $mb_nonce
-
bbs/password_lost2.php
password_lost2_after
$mb, $mb_nonce, $mb_lost_certify
-
bbs/qawrite_update.php
qawrite_update
$qa_id, $write, $w, $qaconfig
-
bbs/register_form_update.php
register_form_update_before
$mb_id, $w
-
register_form_update_valid
$w, $mb_id, $mb_nick, $mb_email
-
register_form_update_send_mb_mail
$config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content
-
register_form_update_send_admin_mail
$mb_nick, $mb_email, $config['cf_admin_email'], $subject, $content
-
register_form_update_send_certify_mail
$config['cf_admin_email_name'], $config['cf_admin_email'], $mb_email, $subject, $content
-
register_form_update_after
$mb_id, $w
-
bbs/register_form.php
register_form_before
-
-
register_form_after
$w, $agree, $agree2
-
bbs/write_comment_update.php
comment_update_after
$board, $wr_id, $w, $qstr, $redirect_url, $comment_id, $reply_array
-
bbs/write_update.php
write_update_before
$board, $wr_id, $w, $qstr
-
write_update_file_insert
$bo_table, $wr_id, $upload[$i], $w
-
write_update_after
$board, $wr_id, $w, $qstr, $redirect_url
-
bbs/write.php
bbs_write
$board, $wr_id, $w
-
lib/cache.lib.php
adm_cache_delete
$board_tables
-
lib/common.lib.php
alert
$msg, $url, $error, $post
-
alert_close
$msg, $error
-
theme/basic/tail.sub.php
tail_sub
-
-

그누보드 훅 구현에 대한 정리

그누보드 훅을 순차적으로 정리하면 다음과 같다.
1. 넣고 싶은 이벤트 명을 찾거나 /bbs/, /adm/ 폴더의 파일을 분석하여 넣고싶은 이벤트 명을 찾아낸다.
1. /extend/ 폴더에 들어갈 라이브러리 파일을 만든다.
2. 실행될 함수를 생성하여 작성하고 add_event() 함수를 통해 실행될 함수를 등록한다.
간단히 위와 같이 하면 등정 시점에 함수를 실행 할 수 있다.

그누보드 스킨과 다른점

사실 그누보드 스킨도 동일한 기능을 제공하고 있었다.
게시판 스킨에서 update_head.skin.php 파일을 만들어서 넣으면
게시글을 작성하거나 업데이트 하기전 미리 스킨 파일이 실행되고 변수를 조작하거나 변경할 수 있다.
기능적인 부분은 동일하지만 다른점은
활용 범위가 넓어 졌다는 것이다.
스킨 방식은 스킨이 호출 되는 범위에서만 적용이 되었지만
훅 방식은 스킨이 없는 관리자 페이지(/adm/) 같은 부분에 더 넓게 분포 되어 있기 때문에
조금 더 적용 범위가 넓어 졌다고 보면 된다.
Last updated @3/30/2023
Copyright 2023, 실전코딩 All Rights Reserved.