그누보드가 현재 테마의 경로를 어떻게 지정해주는지 알고 싶습니다.
본문
common.php 파일에
// 테마경로
if(defined('_THEME_PREVIEW_') && _THEME_PREVIEW_ === true)
$config['cf_theme'] = isset($_GET['theme']) ? trim($_GET['theme']) : '';
if(isset($config['cf_theme']) && trim($config['cf_theme'])) {
$theme_path = G5_PATH.'/'.G5_THEME_DIR.'/'.$config['cf_theme'];
if(is_dir($theme_path)) {
define('G5_THEME_PATH', $theme_path);
define('G5_THEME_URL', G5_URL.'/'.G5_THEME_DIR.'/'.$config['cf_theme']);
define('G5_THEME_MOBILE_PATH', $theme_path.'/'.G5_MOBILE_DIR);
define('G5_THEME_LIB_PATH', $theme_path.'/'.G5_LIB_DIR);
define('G5_THEME_CSS_URL', G5_THEME_URL.'/'.G5_CSS_DIR);
define('G5_THEME_IMG_URL', G5_THEME_URL.'/'.G5_IMG_DIR);
define('G5_THEME_JS_URL', G5_THEME_URL.'/'.G5_JS_DIR);
}
unset($theme_path);
}
이런 구문이 있긴 한데 $config['cf_theme']도 결국엔 그누보드에서 sql로 넣어줘야 하는 거잖아요?
근데 이 sql로 넣어주는 부분이 일단 theme.php에 있고(정확히는 admin.lib.php), 이 theme.php는 adm폴더안에 있습니다. 근데 결국 theme를 바꿔주려면 adm 페이지에 접속을 해야하니, 이 때 admin.lib.php 안에 있는 get_theme_dir() 함수안에 있는 쿼리문에 의해 데이터베이스에 경로를 넣겠죠? 여기까진 좋아요.
그럼 데이터베이스에 현재 테마의 경로가 지정돼 있을거고 위에 있는 $config['cf_theme'])로 데이터베이스 에 있는 현재 테마 경로 폴더명의 정보를 가져오겠네요. 근데 몇번째인지 안나와있어요. 즉, 테마가 여러개 일 수 있는데 여기 위에는 어떠한 반복문도 없죠.
그런데 theme.php에는 array_unshift($theme, $config['cf_theme']);라는 함수가 있습니다.
이게 요소?를 첫번째로 옮겨와주는 함수라더군요. 그래서 따로 common.php의 상수 선언에서 반복문같은걸 안쓰면 자동으로 첫번째걸 가져와주는건지 궁금합니다.
위에 볼드체로 한 부분이 사실 가장 궁금한거였는데 서두가 너무 길어졌네요 죄송합니다.
답변 2
https://github.com/gnuboard/gnuboard5/blob/master/common.php#L350
>
https://github.com/gnuboard/gnuboard5/blob/master/lib/get_data.lib.php#L4
$config['cf_theme'] 는
g5_config 테이블의
cf_theme varchar(100) NOT NULL DEFAULT '' 필드
스트링 값이 담깁니다.
그리고 상수정의부
https://github.com/gnuboard/gnuboard5/blob/master/common.php#L676
는 문자열 연결 연산입니다.
define('G5_THEME_URL', G5_URL.'/'.G5_THEME_DIR.'/'.$config['cf_theme']);
theme.php 는 위 연산들이 모두 완료되고 난 후 호출됩니다.
!-->{$g5['config_table']} 테이블의 cf_theme 필드 값에
'basic' 설정시
define('G5_THEME_URL', G5_URL.'/'.G5_THEME_DIR.'/'.$config['cf_theme']); 는
...URL.../...THEME.../basic
'anotherTheme' 으로 설정시
define('G5_THEME_URL', G5_URL.'/'.G5_THEME_DIR.'/'.$config['cf_theme']); 는
...URL.../...THEME.../anotherTheme
{$g5['config_table']} 테이블의 cf_theme 필드 값을 바꿔가며
단순하게
define('G5_THEME_URL', G5_URL.'/'.G5_THEME_DIR.'/'.$config['cf_theme']);
echo G5_THEME_URL;
헤보시면 이해가 가시리라 생각됩니다.
각각의 테마를 구분해서
라는 부분이 무슨 의미인지 모르겠습니다.
테마는 여러개 있을수 있지만 {$g5['config_table']} 테이블의 cf_theme 필드 값에 적용하기 위해
지정하는 테마는 결국 하나 인거고
문자열을 설정하면 그 값을 그냥 가져오는것 뿐입니다.