테스트 사이트 - 개발 중인 베타 버전입니다

css, js 파일의 수정 시간을 verison 에 적용하기

· 3년 전 · 2579 · 2

그누보드에서 스킨이나 웹사이트의 디자인을 css로 변경하는 경우,

add_stylesheet 로 임베드되는 파일의 버전이 자동으로 붙도록 구성되어 있는데요.

이 버전 관리는 /extend/version.extend.php 에서 하게 되어 있더라고요.

 

저는 css 수정이 꽤 잦은 편이라… 

파일의 수정시간을 version 으로 적용하는 다른 팁들을 참고하여 적용하고 있었습니다.

그런데, add_stylesheet 나 add_javascript 로 파일을 임베드 할 때, 코드가 좀 복잡해지는 것 같아서요.

조금 바꿔서 적용을 해봤습니다.

 

 

1. /extend/version.extend.php 하단에 아래의 코드 추가

다음의 코드(숫자는 다를 수 있습니다.) 하단에 그 아래의 코드를 추가합니다.

 


function add_css($file,$n) {
    if (strpos($file, G5_PATH) !== false) {
        $file_location = str_replace(G5_PATH, '', $file);
    } else if(strpos($file, G5_URL) !== false) {
        $file_location = str_replace(G5_URL, '', $file);
    }
    $file_real_location = G5_PATH.'/'.$file_location;
    if (file_exists($file_real_location)) {
        $file_ver = "?ver=".date( 'YmdHis', filemtime( $file_real_location) );
    }
    $css = '<link rel="stylesheet" href="'.$file_location.$file_ver.'">';
    add_stylesheet($css, $n);
}


function add_js($file,$n) {
    if (strpos($file, G5_PATH) !== false) {
        $file_location = str_replace(G5_PATH, '', $file);
    } else if(strpos($file, G5_URL) !== false) {
        $file_location = str_replace(G5_URL, '', $file);
    }
    $file_real_location = G5_PATH.'/'.$file_location;
    if (file_exists($file_real_location)) {
        $file_ver = "?ver=".date( 'YmdHis', filemtime( $file_real_location) );
    }
    $js = '<script src="'.$file_location.$file_ver.'"></script>';
    add_javascript($js, $n);
}

 

 

2. 그리고 css 또는 js 에서 적용해야 하는 코드를 변경해줍니다.

예를 들어,
add_stylesheet('<link rel="stylesheet" href="'.$member_skin_url.'/style.css?ver='.G5_CSS_VER.'">', 10);
같은 코드를,

add_css("$member_skin_url/style.css",0);

로 변경해주면 됩니다.

 

js는

add_js(G5_THEME_PATH.'/js/common.js',11);

같은 형태로 변경해주면 됩니다.

 

 

 

이렇게 적용하면, 

<link rel="stylesheet" href="http://{도메인}/theme/{skin url}/skin.css?ver=220608">

로 출력되던 코드가

<link rel="stylesheet" href="http://{도메인}/theme/{skin url}/skin.css?ver=20220609153302">

로 변경됩니다.

 

/extend/version.extend.php 파일의 버전을 바꿀 필요도 없고,

파일을 수정하게 되면 그 수정한 시간을 기반으로 version 을 붙여서 출력해주니, 브라우저 캐쉬를 비울 필요 없이 바꾼 css 나 js 가 적용된 화면을 볼 수 있습니다.

다만 이 코드는 cafe24 호스팅에서만 확인했고요. 만약 도메인과 연결되는 기본 디렉토리 (카페24의 경우 {아이디}/www)가 아닌 다른 곳에 그누보드를 설치하셨다면 소스 수정을 하셔야 합니다.

댓글 작성

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

로그인하기

댓글 2개

3년 전
이런 방법들을 공유해 주시는 군요... 열공합니다.
감사합니다.
  1. 변수 초기화: 코드에서 $file_ver 변수는 조건문 내에서만 선언되고 있습니다. 만약 file_exists($file_real_location) 조건이 거짓이라면, $file_ver 변수는 정의되지 않은 채로 사용될 것입니다. 이는 PHP 에러 또는 경고를 발생시킬 수 있습니다. 따라서 $file_ver 변수를 빈 문자열로 초기화하는 것이 좋습니다.

  2. 조건문의 중복: strpos() 함수를 사용한 조건문이 중복되어 있습니다. 이 부분은 함수의 시작 부분에서 한 번만 확인하도록 개선할 수 있습니다.

  3. 코드 재사용성: add_css() 함수와 add_js() 함수에 중복된 로직이 많습니다. 중복된 로직을 별도의 함수로 분리하여 코드의 재사용성을 높일 수 있습니다.

개선된 코드 :

 

function get_file_version($file) {
    $file_location = '';
    $file_prefix = strpos($file, G5_PATH) !== false ? G5_PATH : (strpos($file, G5_URL) !== false ? G5_URL : null);
    
    if ($file_prefix) {
        $file_location = str_replace($file_prefix, '', $file);
        $file_real_location = G5_PATH.'/'.$file_location;
        if (file_exists($file_real_location)) {
            return $file_location . "?ver=" . date('YmdHis', filemtime($file_real_location));
        }
    }
    
    return $file_location;
}

function add_css($file, $n) {
    $file_with_ver = get_file_version($file);
    $css = '<link rel="stylesheet" href="'.$file_with_ver.'">';
    add_stylesheet($css, $n);
}

function add_js($file, $n) {
    $file_with_ver = get_file_version($file);
    $js = '<script src="'.$file_with_ver.'"></script>';
    add_javascript($js, $n);
}
 

사용법은 같습니다

게시글 목록

번호 제목
23966
23963
23953
23949
23938
23935
23933
23928
23919
23918
23917
23910
23902
23901
23897
23894
23893
23891
23885
23872
23870
23862
23859
23853
23845
23838
23827
23819
23805
23801