팁자료 [ codeigniter ] ciboard에서 admin의 폴더처럼 다른 파일들도 정리해서 사용하고 싶다면
페이지 정보
작성자 웹지기 댓글 0건 조회 5,000회 작성일 21-11-05 17:06본문
Admin 의 구조(Lite, pro 모두 동일)를 파악해서 /admin 과 같은 방식으로
콘트롤러와 views를 구성하는 방식을 설명
- application > controllers > admin :: admin 폴더가 관리자의 기본폴더
- 응용 ::::: application > controllers > mes :: mes 폴더로 사용이 가능한 폴더
- views > admin > ADMIN_SKIN admin/ADMIN_SKIN 폴더가 관리자의 기본폴더
- 응용 ::::: views/mes/MES_SKIN :: mes 폴더로 사용이 가능한 폴더
ciboard에서 admin의 폴더처럼 다른 파일들도 정리해서 사용하고 싶다면
다음과 같은 방법으로 변경을 해서 사용해야 한다.
1) application/config/config.php
원하는 설정을 정의(기본경로로 사용될 디렉토리명)
$config['uri_segment_mes'] = 'mes'; //18줄에 추
2) application/config/constants.php
mes로 사용할 스킨 디렉토리 정의
defined('ADMIN_SKIN') OR define('ADMIN_SKIN', 'basic'); 와 비슷한 방법으로 정의
defined('MES_SKIN') OR define('MES_SKIN', 'basic'); //100줄에 원하는 설정을 추가(기본경로로 사용될 디렉토리명)
3) application/libaries/Managelayout.php
function admin( 부분을 복사해서 붙어 새로운 레이아웃으로 사용할 함수 생성)
복사한 함수를 => function mes( 새로 레이아웃 함수로 함수명 변경)
함수내 admin으로 되어 있는 부분을 mes로 변경
if (!preg_match('/^adm_menu_([0-9]{3}).*\.php$/', $entry, $m)) //117줄
=> if (!preg_match('/^mes_menu_([0-9]{3}).*\.php$/', $entry, $m))
$data['admin_page_menu'] = array(); //126줄
=> $data['mes_page_menu'] = array();
$res = config_item('admin_page_menu'); //129줄
=> $res = config_item('mes_page_menu');
$data['admin_page_menu'] += config_item('admin_page_menu'); //130줄
=> $data['mes_page_menu'] += config_item('mes_page_menu');
if (uri_string() !== config_item('uri_segment_admin')) { //134~136줄
list($data['menu_dir1'], $data['menu_dir2']) = explode('/', str_replace(config_item('uri_segment_admin') . '/', '', uri_string()));
$data['menu_title'] = element(0, element(element('menu_dir2', $data), element('menu', element(element('menu_dir1', $data), element('admin_page_menu', $data)))));
=> if (uri_string() !== config_item('uri_segment_mes')) {
list($data['menu_dir1'], $data['menu_dir2']) = explode('/', str_replace(config_item('uri_segment_mes') . '/', '', uri_string()));
$data['menu_title'] = element(0, element(element('menu_dir2', $data), element('menu', element(element('menu_dir1', $data), element('mes_page_menu', $data)))));
$data['layout_skin_path'] = config_item('uri_segment_admin') . '/' . ADMIN_SKIN; //145줄
=> $data['layout_skin_path'] = config_item('uri_segment_mes') . '/' . MES_SKIN;
$data['index_url'] = admin_url($data['menu_dir1'] . '/' . $data['menu_dir2']); //147줄
=> $data['index_url'] = mes_url($data['menu_dir1'] . '/' . $data['menu_dir2']);
4) application/config/admin_menu_000.php 파일을 본인이 원하는 파일로 변경
admin_menu_000.php ==> mes_menu_000.php 와 같은 식임.
파일에 들어가서 $config['admin_page_menu']['config'] 로 정의된 부분을
$config['mes_page_menu']['config'] 와 같은 형태로 실제 사용할 명으로 변경
5) application/helpers/CB_url_helper.php
admin_url 함수를 복사해서 붙여넣기를 하고
/**
* Admin 페이지 주소를 return 합니다
*/
if ( ! function_exists('admin_url')) {
function admin_url($url = ''){
$url = trim($url, '/');
return site_url(config_item('uri_segment_admin') . '/' . $url);
}
}
mes_url로 바꿔준다.
/**
* mes 페이지 주소를 return 합니다
*/
if ( ! function_exists('mes_url')) {
function mes_url($url = ''){
$url = trim($url, '/');
return site_url(config_item('uri_segment_mes') . '/' . $url);
}
}
6) application/controllers/mes 폴더 생성 및 파일생성
Application/controllers/mes/ 하위에 원하는 controller파일을 생성
예) Main.php => mes의 메인
예) config/Cbconfigs.php => 기본환경설정파일
이런식으로 Main은 mes접속시 보여질 파일이 됨
config/Cbconfigs.php 는 기존 admin의 기본설정파일을 복사해서 예제로 사용해 봄
이런식으로 파일을 복사하고 Cbconfigs.php 파일내의 경로를 모두 mes에 맞게 수정해줘야 한다.
이때 주의할점은 수정해야 할 함수와 수정하지 말아야 할 함수를 잘 찾아서 수정해줘야 한다.
URL 정의 부분 admin_url => mes_url
Layout 정의 부분
$view['layout'] = $this->managelayout->admin($layoutconfig, $this->cbconfig->get_device_view_type());
=> $view['layout'] = $this->managelayout->mes($layoutconfig, $this->cbconfig->get_device_view_type());
echo $this->load->view('admin/' . ADMIN_SKIN . '/' . $this->pagedir . '/day_excel', $view, true);
=> echo $this->load->view(config_item('uri_segment_mes').'/' . MES_SKIN . '/' . $this->pagedir . '/day_excel', $view, true);
변경하지 말아야 할 함수
$per_page = admin_listnum(); //목록수 불러오는 함수
->get_admin_list( //목록내용 불러오는 함수
$data['index_url'] = admin_url($data['menu_dir1'] . '/' . $data['menu_dir2']);
부분에서 admin을 mes로 변경
$data['index_url'] = mes_url($data['menu_dir1'] . '/' . $data['menu_dir2']);
7) view/폴더에 mes/basic 폴더를 생성
layout.php, layout_popup.php, main.php 등의 파일을 만든다.
layout.php, layout_popup.php 파일에 다음을 추가 해준다.
layout의 경로를 mes로 수정 admin_url() => mes_url()
javascript에서는 mes_url 추가
var cb_admin_url = "<?php echo admin_url(); ?>";
var cb_mes_url = "<?php echo mes_url(); ?>";
var cb_board = "<?php echo isset($view) ? element('board_key', $view) : ''; ?>";
var cb_board_url = <?php echo ( isset($view) && element('board_key', $view)) ? 'cb_url + "/' . config_item('uri_segment_board') . '/' . element('board_key', $view) . '"' : '""'; ?>;
var cb_device_type = "<?php echo $this->cbconfig->get_device_type() === 'mobile' ? 'mobile' : 'desktop' ?>";
var cb_csrf_hash = "<?php echo $this->security->get_csrf_hash(); ?>";
var cookie_prefix = "<?php echo config_item('cookie_prefix'); ?>";
다른 파일의 경로
config_item('uri_segment_mes') / MES_SKIN / board/post/index.php
config_item('uri_segment_mes') / MES_SKIN /config/cbconfigs/ 파일과 같은 경로를 갖게 된다.
8) 관리자로 접근하면 로그인이 가능하게 수정
uri_segment_admin => uri_segment_mes 로 변경
// mes 페이지
if ($CI->member->is_admin() !== 'super' && $CI->uri->segment(1) === config_item('uri_segment_mes')) {
redirect('login?url=' . urlencode(current_full_url()));
}
if (config_item('use_lock_ip') && $CI->uri->segment(1) === config_item('uri_segment_mes') && $CI->cbconfig->item('admin_ip_whitelist')) {
$whitelist = $CI->cbconfig->item('admin_ip_whitelist');
$whitelist = preg_replace("/[\r|\n|\r\n]+/", ',', $whitelist);
$whitelist = preg_replace("/\s+/", '', $whitelist);
if (preg_match('/(<\?|<\?php|\?>)/xsm', $whitelist)) {
$whitelist = '';
}
if ($whitelist) {
$whitelist = explode(',', trim($whitelist, ','));
$whitelist = array_unique($whitelist);
if (is_array($whitelist)) {
$CI->load->library('Ipfilter');
if ( ! Ipfilter::filter($whitelist)) {
$title = '관리자 페이지';
$message = '현재 접속하신 아이피는 관리자 페이지 접근이 차단되었습니다';
show_error($message, '500', $title);
exit;
}
}
}
}
댓글목록
등록된 댓글이 없습니다.