common의 run_replace 사용하기 > 그누보드5 팁자료실

그누보드5 팁자료실

common의 run_replace 사용하기 정보

common의 run_replace 사용하기

본문

작업을 하던중에 common내 is_admin 함수나 get_config 함수를 활용할때

소스내에는 분명 run_replace가 있음에도 작동은 하지 않았습니다.

 

만수킴 님의 팁

https://sir.kr/g5_tip/14077

 

위 글에서 알 수 있듯이 함수들이 모두 사용되고 변수에 지정된 후에

extend가 로드되기 때문에, 활용면에서 문제가 생겼습니다.

 

만수킴님의 팁 또한 괜찮은 해결방법이나 근본적인 해결을 하기에는 미흡하고

무엇보다 지금 버전에서는 extend 폴더내 모든 php 파일을 로드하는 것이므로

파일명을 지정하지 않으면 두번 로드되어 오류가 발생할 여지가 있었습니다.

 

때문에 저는 extend 로드 방식을 그대로 활용하여,

extend 폴더 안에 pre 라는 폴더를 추가로 만들고,

이 pre 폴더 내의 php 파일들을 extend 처럼 로드하되

get_config 함수등 기본적으로 run_replace가 지정된 함수가 실행되기 전인

 

common.php 내

//==============================================================================
// 공용 변수
//------------------------------------------------------------------------------
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = get_config(true);

 

구문의 윗부분에 추가하기로 정하였습니다.

이를 통해 활용할 훅도 두개정도 추가하면서 활용성을 높이려합니다.

 

위 common.php내 구문을 아래와 같이 변경해줍니다.

 

// common.php 파일을 수정할 필요가 없도록 확장합니다.
// common 의 run_replace 위한 extend 폴더내 pre 폴더 파일 먼저 로드
// config 를 불러오기 전이므로 경로 직접 지정
$g5_path = g5_path();
$tmp_path = isset($g5_path['path']) ? $g5_path['path'] : '';
unset($g5_path);

$pre_extend_file = array();
$pre_tmp = dir($tmp_path.'/extend/pre');
while ($entry = $pre_tmp->read()) {
    // php 파일만 include 함
    if (preg_match("/(\.php)$/i", $entry))
        $pre_extend_file[] = $entry;
}

if(!empty($pre_extend_file) && is_array($pre_extend_file)) {
    natsort($pre_extend_file);

    foreach($pre_extend_file as $file) {
        include_once($tmp_path.'/extend/pre/'.$file);
    }
    unset($file);
}
unset($tmp_path);
unset($pre_extend_file);

// config 로드전 훅 추가
run_event('common_config_before');

//==============================================================================
// 공용 변수
//------------------------------------------------------------------------------
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = get_config(true);

// config 로드후 훅 추가
run_event('common_config_after');

 

위처럼 수정을 하고 extend 폴더 내 pre 폴더를 생성해줍니다.

 

이제 pre 폴더에 extend 처럼 php 파일을 생성하고, is_admin, get_config 등의 run_replace를

확인해보시면, 정상 작동하시는것을 확인하실 수 있습니다.

 

새로 추가한 common_config_before, common_config_after 등도 활용하여,

훅을 조금더 다양한 분야에서 활용하실 수 있을것입니다.

config_before 를 활용하실 때 또는 pre extend 를 추가하실 때 유의하실 점은

기본적인 define 선언이 이루어지지 않은 상태이기때문에 G5_DOMAIN 등등

기본적인 변수를 활용할 수 없습니다.

 

때문에 기본적인 변수는 직접 지정해주시거나, get_config 내의 run_replace를 활용할 계획이 없다면,

common_config_after를 pre extend에서 호출하시면, 정상적인 기본 변수를 활용가능합니다.

 

이점 유의하시고 즐거운 코딩 되시면 좋겠습니다.

추천
3

댓글 1개

구조 변경등의 우려가 있을 듯 싶어 폴더를 원할때 생성하여 사용하실 수 있도록
코드를 조금 수정합니다.



// common.php 파일을 수정할 필요가 없도록 확장합니다.
// common 의 run_replace 위한 extend 폴더내 pre 폴더 파일 먼저 로드
// config 를 불러오기 전이므로 경로 직접 지정
$g5_path = g5_path();
$tmp_path = isset($g5_path['path']) ? $g5_path['path'] : '';
unset($g5_path);

$pre_extend_file = array();

//extend 폴더 내부에 pre 폴더가 존재하는지 확인합니다.
if(is_dir(($tmp_path.'/extend/pre')) {
//pre 폴더가 존재하면 내부 php파일을 로드합니다.
$pre_tmp = dir($tmp_path.'/extend/pre');
while ($entry = $pre_tmp->read()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
$pre_extend_file[] = $entry;
}

if(!empty($pre_extend_file) && is_array($pre_extend_file)) {
natsort($pre_extend_file);

foreach($pre_extend_file as $file) {
include_once($tmp_path.'/extend/pre/'.$file);
}
unset($file);
}
}
unset($tmp_path);
unset($pre_extend_file);

// config 로드전 훅 추가
run_event('common_config_before');

//==============================================================================
// 공용 변수
//------------------------------------------------------------------------------
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = get_config(true);

// config 로드후 훅 추가
run_event('common_config_after');




위처럼 변경합니다.
pre 폴더가 존재하지 않아도 오류가 발생하지 않으며,
기능 사용을 원할때 extend 폴더 내부에 pre 폴더를 생성하시고,
그안에 php 파일을 배치하시면 됩니다.


저처럼 common.php 변수들의 run_replace 문제에 고생하시는 분들에게 조금이나마 도움이 되기를 바랍니다.
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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