2026, 새로운 도약을 시작합니다.

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에서 호출하시면, 정상적인 기본 변수를 활용가능합니다.

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

|

댓글 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 문제에 고생하시는 분들에게 조금이나마 도움이 되기를 바랍니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

그누보드5 팁자료실

번호 제목 글쓴이 날짜 조회
공지 3년 전 조회 4,598
2741 3일 전 조회 112
2740 4일 전 조회 104
2739 1주 전 조회 209
2738 1주 전 조회 217
2737 1주 전 조회 181
2736 1주 전 조회 280
2735 3주 전 조회 281
2734 3주 전 조회 263
2733 1개월 전 조회 265
2732 1개월 전 조회 301
2731 1개월 전 조회 267
2730 1개월 전 조회 226
2729 1개월 전 조회 356
2728 1개월 전 조회 245
2727 1개월 전 조회 422
2726 1개월 전 조회 256
2725 1개월 전 조회 331
2724 1개월 전 조회 360
2723 1개월 전 조회 267
2722 1개월 전 조회 300
2721 1개월 전 조회 211
2720 2개월 전 조회 304
2719 2개월 전 조회 307
2718 2개월 전 조회 202
2717 2개월 전 조회 336
2716 2개월 전 조회 202
2715 2개월 전 조회 312
2714 2개월 전 조회 273
2713 2개월 전 조회 376
2712 2개월 전 조회 289
🐛 버그신고