(관리자 페이지 및 다른 디렉토리에서 ) 게시판 끌어오기 정보
(관리자 페이지 및 다른 디렉토리에서 ) 게시판 끌어오기본문
기존 /bbs/~ 게시판 로직을 다른 디렉토리에서 include하여 사용하는 방식이다.
따라서 기존 /bbs/~ 게시판 로직을 수정할 경우 다른곳에서 수정할 필요가 없다. 한 곳의 로직으로 다른곳에서 동일하게 사용한다.
(아래는 관리자페이지(/adm/)에서 게시판을 끌어오는 경우이다.)
/adm/board_list.php
:유져단 게시판으로 이동하는 것에서 관리자 디렉토리 내에서 게시판에 접속하도록 경로를 변경한다.
<a href="<?php echo G5_BBS_URL ?>/board.php?bo_table=<?php echo $row['bo_table'] ?>"><?php echo $row['bo_table'] ?></a>
을
<a href="./board.php?bo_table=<?php echo $row['bo_table'] ?>"><?php echo $row['bo_table'] ?></a>
로 교체
/lib/common.lib.php
1. 다음 함수 추가 : /bbs/~디렉토리 외에 다른곳에 게시판을 불러오는지 분별하는 함수이다.(아래는 관리자페이지에서 불러오는 경우로 진행)
-관리자 페이지가 아닌 다른 디렉토리에서 게시판을 끌어오는 경우 아래(‘/adm/’)에서 해당 경로로 수정해주어야 한다.
-아래의 경우 관리자 페이지가 아니더라도 ‘adm’이라는 경로가 포함되면 'ture'가 return됨을 주의.
function is_adm_page(){
$is_adm_page = parse_url($_SERVER['PHP_SELF']);
if(strpos($is_adm_page['path'], '/adm/') !== false) {
return true;
}
}
2.
function get_list($write_row, $board, $skin_url, $subject_len=40)
{
global $g5, $config;
global $qstr, $page;
에서 마지막에 아래와 같이 글로벌 변수를 추가(관리자 페이지에서 끌어오는 경우)
global $is_admin;
3.
$list['href'] = G5_BBS_URL.'/board.php?bo_table='.$board['bo_table'].'&wr_id='.$list['wr_id'].$qstr;
을
if(is_adm_page() && $is_admin=='super'){
$list['href'] = './board.php?bo_table='.$board['bo_table'].'&wr_id='.$list['wr_id'].$qstr;
}else{
$list['href'] = G5_BBS_URL.'/board.php?bo_table='.$board['bo_table'].'&wr_id='.$list['wr_id'].$qstr;
}
와 같이 구분해준다.
특정 페이지에서 게시판을 끌어오는 경우 게시판 관련 링크를 해당 디렉토리 기준으로 구분하는 과정이다.
-‘&& $is_admin=='super'’조건은 필요에 맞게 수정한다.
4. 다음 함수에서 코드를 추가한다.
-새로 추가된 코드나 실제 적용될 디렉토리 위치는 필요에 맞게 수정한다.
// $dir 을 포함하여 https 또는 http 주소를 반환한다.
function https_url($dir, $https=true)
{
/*새로 추가된 코드*/
if(is_adm_page()){
$dir= 'adm';
}
/*새로 추가된 코드 끝*/
if ($https) {
if (G5_HTTPS_DOMAIN) {
$url = G5_HTTPS_DOMAIN.'/'.$dir;
} else {
$url = G5_URL.'/'.$dir;
}
} else {
if (G5_DOMAIN) {
$url = G5_DOMAIN.'/'.$dir;
} else {
$url = G5_URL.'/'.$dir;
}
}
return $url;
}
/bbs/board.php
:게시판을 다른곳에서 include하는 경우 헤더와 푸터는 제외한다.
include_once(G5_BBS_PATH.'/board_head.php');
을
if(!is_adm_page()){
include_once(G5_BBS_PATH.'/board_head.php');
}
로 수정
include_once(G5_BBS_PATH.'/board_tail.php');
을
if(!is_adm_page()){
include_once(G5_BBS_PATH.'/board_tail.php');
}
로 수정
/bbs/write.php
:해당 경로에 board_head.php와 board_tail.php이 없어서 처리해주지 않아도 결과는 같지만 불필요한 include가 추후에 에러가 될 수 있기 때문에 처리해준다.
include_once('./board_head.php');
을
if(!is_adm_page()){
include_once('./board_head.php');
}
로 수정
include_once('./board_tail.php');
을
if(!is_adm_page()){
include_once('./board_tail.php');
}
로 수정
/head.sub.php
: 관리자페이지(defined('G5_IS_ADMIN'))에서 끌어오는 경우 관리자 관련 css만 불러오게 되므로 유져단(게시판 관련 css포함) css를 불러온다.
-조건문의 defined('adm_board')는 게시판을 끌어오는 페이지에서만 작동할 수 있도록 해당 페이지 상단에 정의된 값이다.
<?php
if (defined('G5_IS_ADMIN')) {
if(!defined('_THEME_PREVIEW_'))
echo '<link rel="stylesheet" href="'.G5_ADMIN_URL.'/css/admin.css">'.PHP_EOL;
} else {
을
<?php
if (defined('G5_IS_ADMIN')) {
if(!defined('_THEME_PREVIEW_'))
echo '<link rel="stylesheet" href="'.G5_ADMIN_URL.'/css/admin.css">'.PHP_EOL;
if(defined('adm_board')) {
$shop_css = '';
if (defined('_SHOP_')) $shop_css = '_shop';
echo '<link rel="stylesheet" href="'.G5_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css?ver='.G5_CSS_VER.'">'.PHP_EOL;
}
} else {
로 수정
/adm/board.php 생성
<?php
define('adm_board', true);
$sub_menu = "300900";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'r');
include_once('./admin.head.php');
include_once(G5_PATH.'/bbs/board.php');
?>
<?php
include_once('./admin.tail.php');
?>
/adm/write.php 생성
<?php
define('adm_board', true);
$sub_menu = "300900";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'r');
include_once('./admin.head.php');
include_once(G5_PATH.'/bbs/write.php');
?>
<?php
include_once('./admin.tail.php');
?>
/adm/write_update.php 생성
<?php
define('adm_board', true);
$sub_menu = "300900";
include_once('./_common.php');
auth_check($auth[$sub_menu], 'r');
//include_once('./admin.head.php');
include_once(G5_PATH.'/bbs/write_update.php');
?>
<?php
//include_once('./admin.tail.php');
?>
/adm/admin.tail.php
:관리자 페이지에서 글을 작성하는 경우 관리자 전용 js로 인해 토큰값이 중복되어 문제가 생긴다.
관리자 페이지 게시판일 경우 불러오는 스크립트를 구분해준다.
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
을
<?php
if(defined('adm_board')) { ?>
<script src="<?php echo G5_ADMIN_URL ?>/admin_no_token.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php } else { ?>
<script src="<?php echo G5_ADMIN_URL ?>/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
<?php } ?>
로 수정
/adm/admin_no_token.js 생성
: /adm/admin.js에서 아래 함수만 제거한 동일한 내용
$(function() {
$(document).on("click", "form input:submit", function() {
var f = this.form;
var token = get_ajax_token();
if(!token) {
alert("토큰 정보가 올바르지 않습니다.");
return false;
}
var $f = $(f);
if(typeof f.token === "undefined")
$f.prepend('<input type="hidden" name="token" value="">');
$f.find("input[name=token]").val(token);
return true;
});
});
관리자 페이지의 경우 게시판을 끌어오면서 default.css도 같이 끌어왔기 때문에 .css 중복이 일어난다.
따라서 아래와 같이 처리한다.
/adm/css/admin.css
/* 레이아웃 */
~
/* gnb */
~
부분에 'adm_'을 붙여준다.
ex)#hd => #adm_hd
/adm/admin.tail.php
하단의 메뉴 관련 스크립트에도 역시 ‘adm_’을 붙여준다.
admin.head.php
:위에서 수정한 css id,class와 대응되는 관리자 페이지 메뉴 코드를 모두 수정한다.
ex) <header id="hd"> → <header id="adm_hd">
/css/default.css
:관리자 페이지에서 끌어오는 경우 유져단 css코드와 중복되므로 주석처리해준다.(단, 유져단에서 사용하지 않는 코드만)
/* 중간 레이아웃 */
/*
#wrapper
~
#container_title
*/
(관리자페이지에서 게시판을 끌어오는 경우 푸터 관련 css는 따로 처리하지 않음)
(코멘트, 답변글 로직은 따로 생성하지 않음, board.php, write.php write_update.php 만 끌어옴.)
4
댓글 8개
css를 잘 몰라서 마지막 css수정하고 헤드랑 테일에서 대응되는것 수정하는 과정이 어렵네요...
캡쳐이미지 참고하세요~ /* gnb */ 부분도 동일하게 변경하시면됩니다,