[GNU 5.4] Hook에 관해 알아보자 4 > 그누5.4포럼

그누5.4포럼

그누보드 5.4 버전 사용자 포럼 소모임 게시판 입니다.

[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')
    $unkind = 'send';
else if ($kind == 'send')
    $unkind = 'recv';
else
    alert(''.$kind .'값을 넘겨주세요.');

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){
    global $g5, $is_member, $member;

    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 = '' ";
    $row = sql_fetch($sql);

    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' ";
    $row2 = sql_fetch($sql);

    if( $row['cnt'] && ! $row2['cnt'] ){
        $sql = " select * from {$g5['memo_table']} where me_send_mb_id = '{$member['mb_id']}' and me_type = 'recv' ";
        $result = sql_query($sql);

        while ($row = sql_fetch_array($result))
        {
            $sql = " insert into {$g5['memo_table']} ( me_recv_mb_id, me_send_mb_id, me_send_datetime, me_read_datetime, me_memo, me_send_id, me_type ) values ( '".addslashes($row['me_recv_mb_id'])."', '".addslashes($row['me_send_mb_id'])."', '".addslashes($row['me_send_datetime'])."', '".addslashes($row['me_read_datetime'])."', '".addslashes($row['me_memo'])."', '".$row['me_id']."', 'send' ) ";

            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를 보면 더 여러가지 사용법이 있지만 모르셔도 됩니다.

 

 

그럼 총총총

 

 

추천
1

댓글 11개

여기부터는 다음 주에 배우겠습니다.~~
지금까지 이렇게 인기 좋은 소모임은 처음입니다. ㅋ
님도 뜨시고 아이고.
배워야 할 것이 장난이 아닙니다. ㅡㅡ.
1, 2, 3편도 아직 모르는데요. 으아!
하지만 감사합니다!

//

한 번 읽었으나 설명이 잘 되어 있습니다.
무슨 말씀인지 알 것 같아요!
훅 실행 위치가 extend 폴더 내부에서만 동작하나요? 제가 추가를 했는데요 게시판 글쓸때 훅이용해서 추가 작업을 했는데 동작하지 않아요.. ㅠㅠ
우와 오늘 이 시리즈 읽으면서 단번에 이해했습니다.
중요한 건 이걸 갖고 뭘 만들지 고민을 할 차례네요.
왕수고 하셨어요.
얼마전 4월쯤 10년만에 그누 찾았다가 훅기능이란 게 보여서 엉 이건 뭐임?
일단 미루어 두었다 며칠 전 작정하고 검색을 했었지요.
잘 설명해 주셔서 금방 이해했습니다. 그런데 이 좋은 걸 갖고 무슨 효율적인 응용물을 만들어야 할지...
머리가 점점 부패되어 가서 참신한 아이디어가 안 떠 오르는 것이 가장 큰 문제네요.ㅜㅠ
저는 빌더도 테마도 안 쓰고 only 그누 순정이에요. xe 나 워드프레스는 깔아본적도 없고 앞으로도 그럴 생각이 없답니다.
홈페이지 제작 요청이 와서 워드프레스로 만들어 달라고 하면 진행 자체를 하지도 않구요,
여기저기 박치기 하다 보면 가닥이 나오겠지요. 좋은 말씀 주셔서 감사합니다.
전체 27 |RSS
그누5.4포럼 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIR SOFT