TIP게시판

제목 config.php 를 확장해봅시다!
글쓴이 방문넷 작성시각 2014/09/07 08:45:47
댓글 : 11 추천 : 1 스크랩 : 0 조회수 : 12724   RSS
언제나 디비에 다 우겨넣고 관리를 하고싶어하는 방문넷 입니다.

config 를 따로 파일 구성해서 로드하는게 간혹 구찮을때가 많아서

이번에도 디비에 우겨 넣기 해보았습니다.

앞전에 올린 라우터와 같은 이치라고 보시면됩니다. 다만 라우터는 라우터를 직접 수정했지만 

이번엔 core 확장인셈입니다.

코드 : core/MY_Config.php
get('settings');
		$result = $query->result();
		foreach($result as $row) {
			$this->set_item($row->config_key, $row->config_value);
		}
		unset($db);
	}
}

디비 스키마
CREATE TABLE `settings` (
	`id` int(11) NOT NULL,
	`config_group` varchar(128) NOT NULL,
	`config_key` varchar(255) NOT NULL,
	`config_value` text NOT NULL,
	`comment` text NOT NULL,
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

요로쿵 등록하고 쓰시면 config가 언제든지 셋팅 되어 디비에서 config값 추가 할수있습니다.

이렇게 하고 저는 일부 기본 config를 주석처리하고 디비에서 관리하고있습니다.

이를테면 로그기록이라던가 말이죠...
 다음글 모듈단위로 개발할때 관리자 따로 구성하기? (2)
 이전글 다국어를 디비와 파일 혼용으로 쓰기. (2)

댓글

darkninja / 2014/09/07 23:38:11 / 추천 0
controller 에 따른 css js 파일 정보를 디비로 관리하기 위해 만들고 있습니다.

컨트롤러
함수나위젯이름, or 컨트롤러에서 사용하는 라이브러리(에디터 등)
type(함수or위젯or라이브러리)
level(우선로딩순위)
active(사용or미사용)
css js 파일은 문자열 형태이며 ' ; ' 나 특정 문자로 구분하여 저장합니다.

이걸 적용하기 위하여 주소체계를 정리 중인데
게시판 컨트롤러 모델 뷰한세트로 여러테이블을 관리하려고 하다보니
전체적으로 한치의 오차도 허용하지 않는 답답한 구조가 되어 버렸습니다.
좋은 아이디어 있으시면 적선좀 하세요^^
CREATE TABLE IF NOT EXISTS `cssjs_setting` (
  `controller` varchar(30) NOT NULL,
  `name` varchar(30) NOT NULL DEFAULT '',
  `type` tinyint(4) NOT NULL DEFAULT '0',
  `level` tinyint(4) NOT NULL DEFAULT '0',
  `active` tinyint(4) NOT NULL DEFAULT '0',
  `css` text,
  `js` text,
  `reg_date` datetime,
  `modify_date` datetime,
  PRIMARY KEY (`controller`,`name`)
);
방문넷 / 2014/09/08 07:47:20 / 추천 0
@darkninjs //
허얼...저보다 더 강력하게 관리하실려고 하다니;;; 
 
/**
  * 클래스 메쏘드이용한 자바스크립트 로드..
  * @param  [type] $filename [description]
  * @return [type]           [description]
  */
 public function jsAutoLoader($theme) {
  $filepath = config_item('asset_path').$theme.'/js/'.$this->router->class.'/'.$this->router->method.'.js';
  if(file_exists($filepath) === true) {
   return '<script src="http://'.base_domain().'/'.$filepath.'"></script>'."\n";
  }
 }

 /**
  * 클래스 메쏘드이용한 CSS 로드..
  * @param  [type] $filename [description]
  * @return [type]           [description]
  */
 public function cssAutoLoader($theme) {
  $filepath = config_item('asset_path').$theme.'/css/'.$this->router->class.'.css';
  if(file_exists($filepath) === true) {
   return '<link href="http://'.base_domain().'/'.$filepath.'" rel="stylesheet">'."\n";
  }
 }

 /**
  * 클라이언트 뷰
  * @param  [type]  $page         [description]
  * @param  array   $vars         [description]
  * @param  boolean $include_left [description]
  * @return [type]                [description]
  */
 public function cview($page, $vars = array(),$popup = false) {
  if($popup === false) {
   $vars['header'] = $this->view('_layouts/header.php', $vars, true);
   $vars['nav'] = $this->view('_layouts/nav.php', $vars, true);
   $vars['aside'] = $this->view('_layouts/aside.php', $vars, true);
   $vars['footer'] = $this->view('_layouts/footer.php', $vars, true); 
  }

  $vars['content'] = $this->view($page, $vars, true);
  
  $output = $this->view('_layouts/layout.php', $vars, true);
  $output = remove_tmp_code($output);
  $output = arrange_space($output);
  
  echo $output;
 }

/**
  * 뷰 재정의
  * @param  [type]  $view   [description]
  * @param  array   $vars   [description]
  * @param  boolean $return [description]
  * @return [type]          [description]
  */
 public function view($view, $vars = array(), $return = false, $admin=false) {
  
  $site = $this->ccache->load('site_loader');
  
  if($site === false):
   log_message('debug','[마이로더] Initilize!');
   $site = $this->companies_m->read();
   $this->ccache->save('site_loader', $site);
  endif;

  $this->theme = $site->theme;

  $theme_path = ($admin)? config_item('admin_theme') : $this->theme;
  
  //Asstets로드.
  $vars['jsAutoLoader'] = $this->jsAutoLoader($theme_path);
  $vars['cssAutoLoader'] = $this->cssAutoLoader($theme_path);

  $vars['theme_path'] = config_item('theme_path').$theme_path; //테마경로.
  $vars['asset_path'] = config_item('asset_path').$theme_path; //스태틱경로.
  
  $vars['common_asset_path'] = config_item('asset_path').'common'; //공용 스태틱.
  
  return parent::view($theme_path .'/' . $view, $vars, $return);
 }


음;;; 체계적으로 관리하실려는게 ..음....... 음..........................  제머리속에 좀더 좋은 아이디어가 나오질않네유 ㅠㅠ
저는 CSS JS는 그냥 컨트롤러 메쏘드 따라가게만 만들어놨습니다;;

http://도메인//controller/method의 주소체계이면

js => http://스태틱도메인/공용 혹은 테마/js/controller/method.js
css => http://스태틱도메인/공용 혹은 테마/css/controller.css

이렇게 불러다 쓰고있습니다... 

level이... 우선순위 라 함은..... 컨트롤러 순위인지 아님 CSS,JS 등의 순위인지는 몰르겠네용...

디비로 작업을 하신다라면....

controllers 디비와 js와 css 디비를 서로 id값으로 맞물려서 작업하시는게 어떠실런지....

darkninja / 2014/09/08 15:48:28 / 추천 0
주소가 일단 경험과 실력부족으로
http://127.0.0.1/ci-22-tank/board/view/free/2#comment-2
이렇게 되어 있습니다.
컨트롤러 / view / 테이블이름 입니다.

level 은 지금은 js 파일을 적재 하는데 필요한 우선 순위 입니다.

메인 컨트롤러에서
사용자가 클릭한 주소의 컨트롤러에 따라서
관련정보를 읽어와서
view 에 넘겨주면
head
body 끝부분에서 표시하는 간단한 구조를 생각하고 있습니다.

음 테마는 복잡도를 덜하게 하기 위해서
게시판(테이블) 설정부분에서 입력한 정보를 사용하려고 합니다.

컨트롤러 / 함수 / 테이블이름
이 부분이 주소에서 정해진 위치에 반드시 있어야 한다는 문제가 있습니다.

컨트롤러 디비는  아직 구상중입니다.
게시판(테이블)설정 디비와 같이 사용할 것인가?
어떤 내용을 얼마만큼 포함 시킬지...

컨트롤러 디비 형태가 어느정도 나오면
실제 붙여서 몇달 사용하다보면 결과가 나오겠죠 ㅋ
연말이나 내년초쯤에 완성된 결과가 나올려면
부지런히 삽질해야 겠네요
자료 감사합니다^^
방문넷 / 2014/09/09 21:45:00 / 추천 0
음 디비 스키마첨부터 다시 짜고 있는데요 assets(css,js,img) 
구조에서 공용으로 쓰일 CSS,JS,IMG 도 있을꺼같으신데
type 을 하나 더 추가해보는게 어떤지 조심스레 생각을 말씀드립니다

common 컬럼 만드셔서 1이면 공용 0이면 해당컨트롤러 혹은 메쏘드만...

문뜩 생각하다보니 것도 좋은 방법일꺼같아서 말씀드려봅니다 ^^;;
darkninja / 2014/09/09 22:08:12 / 추천 0
이구조가 필요한게
사이드위젯과  메인화면에서 보여줄 특정게시판 때문에 만들게 되었습니다.

공통으로 들어가는 부분은 최대한 하드코딩으로 때려넣고
최소한의 용도로만 사용할 생각입니다.

규모가 큰 공사에서는 필요하리라 봅니다.

지금은 구현하는거만 해도 실력이 딸리는 형편이라
단순하게 만들려고 애쓰는 중입니다.
차후에 좀더 복잡해지면 쓰임새가 있겠습니다.
 
방문넷 / 2014/09/10 08:11:47 / 추천 0
@darkninja
글쎄요;; darkninja님이 실력이 딸린다기보단 아이디어를 적용함에있어서 

이렇게 해야 맞을지 아닐지랑 효율적인지 아닌지에 대한 생각이 깊으셔서 그런걸껍니다.

구현에 있어서 정답은 없다고 생각이 듭니다.

대충 darkninja님께서 가시려는 방향을 이해했습니다. 저도 한번 연구 해봐서 

다시 글 한번 남겨보겠습니다 ^^ 화이팅하세요!
코드이그 / 2014/09/10 09:42:09 / 추천 0
고수분들의 대화는 뭔가 특별한것이 있네요 ㅎㅎ
letsgolee / 2014/09/10 10:45:08 / 추천 0
좋은걸 시도하시네요...

그런데 때로 단순함은 최고의 코드이기도 합니다. 너무 복잡하게 가는 것을 피하라는 거죠.

복잡함은 나만의 고유 코드가 될 수 있지만 다른 사람들과의 공유는 그만큼 포기해야 합니다. 
방문넷 / 2014/09/10 13:12:47 / 추천 0
@코드이그 // 고수는 아닙니다.. 학습과 더불어 삽질?을 경이롭게 하고 위해 저같은경우는 이렇게 일부러라도 복잡하게 한번씩 시도해보고 그러고있습니다... ^^
@letgolee // 넵 저랑 프로그램 방향이 다른 darkninja님이시지만 얼추 비슷한 생각들을 하고있는 부분도 있는거 같습니당.

네 복잡한 코드는 저도 최대한 피할려고 노력중입니다만..... 이상하게 손따로 머리따로 돌아가네요 ㅎㅎ;;
변종원(웅파) / 2014/09/10 20:23:27 / 추천 0
darininja/ crud 자동생성 라이브러리를 찾아서 보시면 참고하실만 할겁니다.
주소와 실제 컨트롤러, 메소드, 모델이 자동으로 생성되는... ^^
darkninja / 2014/09/11 07:14:41 / 추천 0
또 숙제가 생겼네요 ㅋ