[GNU 5.4] Hook에 관해 알아보자 4 정보
[GNU 5.4] Hook에 관해 알아보자 4본문
[GNU 5.4] Hook에 관해 알아보자 4
원래는 이 시리즈는 3개를 끝으로 마무리를 지으려고 했으나......
한걸음 더 들어가보도록 하겠습니다.
앞에서도 언급했으나 GNU54의 훅은
https://github.com/Josantonius/PHP-Hook
이녀석을 기반으로 두고 있습니다. 자 그럼 영어는 안되지만 api문서를 보겠습니다.
아 문서를 보기전에 이번화에서는 두가지를 더 알아보도록 하겠습니다.
훅의 실행순서와 전송 받는 인자에 관한 이야기 입니다.
자 그럼 이제 문서를 보도록 합니다.
- Attach custom function to action hook:
Hook::addAction($tag, $function, $priority, $args);
Attribute | Description | Type | Required | Default |
---|---|---|---|---|
$tag | Action hook name. | string | Yes | |
$function | Function to attach to action hook. | callable | Yes | |
$priority | Order in which the action is executed. | int | No | 8 |
$args | Number of arguments accepted. | int | No | 0 |
냑에선 add_event() 함수가 이에 해당합니다.
이녀석은 4개의 인자를 가지는것을 알 수 있습니다.
처음 두개는 앞에서도 언급했듯이
처음은 해당하는 Hook의 이름입니다.
두번째는 해당하는 function의 이름이죠
세번째는 order어쩌고 하는걸 보니 이놈이 훅의 순서 입니다.
네번째는 -_-???? 네 이녀석이 사용할 인자의 갯수 입니다.
자 그럼 이제 냑에서 어떻게 사용하고 있는지 셈플을 보도록 하겠습니다.
add_event()와 run_event()가 모두있고 인자를 반환하는 함수를 찾아보겠습니다.
run_event('memo_list', $kind, $unkind, $page);
이늠... 예제로 좋아 보입니다.
해당 파일은 /bbs/memo.php 입니다
이녀석은 memo_list라는 이름을 가지고 있고 총 3개의 인자를 받습니다.
$kind , $unkind , $page 이게 뭘 의미 하는진 중요하지 않으니 그냥 모르셔도 됩니다.
일단 3개를 인자로 받는다는겁니다.
해당소스의 상단에 보면 해당 변수를 정의해둔걸 확인가능 합니다.
if ($kind == 'recv') if ($page < 1) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지) |
역시나 소스가 뭘 의미하는지는 모르셔도 무관합니다. 그냥 셈플 예제이니깐요 -_-;;;
자 그럼 이제 여기에 Hook을 추가하는 녀석을 찾아봅니다.
add_event('memo_list', 'g54_user_memo_insert', 10, 3);
/extend/g5_54version_update.extend.php
에 들어있습니다.
아마 extend쪽에서 훅관련읆 모아두었나 봅니다.
extend관련 해서는 나중에 실제 plugin을 개발할때 다시 언급하겠습니다.
보시면 이녀석은 memo_list라는 이름을 가지고
g54_user_memo_insert 라는 펑션을 실행하며,
10번째... 순서로 실행이 됩니다.
(이는 이보다 먼저 실행해서 작업을 해야하는 경우를 상정해둔 것이라 보여집니다)
그리고 3개의 인자를 받는다... 입니다.
좀전에 보셨듯이 run_event('memo_list', $kind, $unkind, $page); 이녀석이 3개의 인자를
받아서 오기 때문입니다.
자 그럼 다시 g54_user_memo_insert 이녀석을 보겠습니다.
function g54_user_memo_insert($kind, $unkind, $page=1){ if( ! $is_member || $kind !== 'send' ) return; $sql = " select count(*) as cnt from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' and me_send_ip = '' "; if ( !$row['cnt'] ) return; $sql = " select count(*) as cnt from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'send' "; if( $row['cnt'] && ! $row2['cnt'] ){ while ($row = sql_fetch_array($result)) sql_query($sql); $sql = " update {$g5['memo_table']} set me_send_ip = '{$_SERVER['REMOTE_ADDR']}' where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' and me_send_ip = '' "; sql_query($sql); } |
보다싶이 이 function에서 3개의 같은 인자를 받는걸 알 수 있습니다.
역시나 소스가 뭘 의미하는진 중요하지 않습니다.
요점은 add_event() 의 활용법입니다.
이 씨리즈는 최대한 쉽게 최대한 가볍게가 모토였는데...
역시나 심화과정이 되면 쉽게쓸 수가 없네요
뭔가 용어가 프로그램을 처음 접하시는 분들이라면 외계어같을 수 있을겁니다.
(제가 그랬고 지금도 그러하기 때문이죠 -_-;;;;)
그냥 요점은 사용법이 이러하다 정도 입니다.
해당 api를 보면 더 여러가지 사용법이 있지만 모르셔도 됩니다.
그럼 총총총
- [GNU 5.4] Hook에 관해 알아보자 4
- [GNU 5.4] Hook에 관해 알아보자 3
- [GNU 5.4] Hook에 관해 알아보자 2
- [GNU 5.4] Hook에 관해 알아보자 1
1
댓글 11개
지금까지 이렇게 인기 좋은 소모임은 처음입니다. ㅋ
@동하아빠 님도 뜨시고 아이고.
배워야 할 것이 장난이 아닙니다. ㅡㅡ.
1, 2, 3편도 아직 모르는데요. 으아!
하지만 감사합니다!
//
한 번 읽었으나 설명이 잘 되어 있습니다.
무슨 말씀인지 알 것 같아요!
중요한 건 이걸 갖고 뭘 만들지 고민을 할 차례네요.
왕수고 하셨어요.
일단 미루어 두었다 며칠 전 작정하고 검색을 했었지요.
잘 설명해 주셔서 금방 이해했습니다. 그런데 이 좋은 걸 갖고 무슨 효율적인 응용물을 만들어야 할지...
머리가 점점 부패되어 가서 참신한 아이디어가 안 떠 오르는 것이 가장 큰 문제네요.ㅜㅠ
홈페이지 제작 요청이 와서 워드프레스로 만들어 달라고 하면 진행 자체를 하지도 않구요,
여기저기 박치기 하다 보면 가닥이 나오겠지요. 좋은 말씀 주셔서 감사합니다.