CI 코드

제목 [팁] CI 중복배제
글쓴이 ci세상 작성시각 2009/08/12 19:02:33
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 16642   RSS

CI 를 쓰면서 가장 신경쓰는 부분이 중복성을 배제시키는 부분이었습니다.  컨트롤러 파트를 다음과 같이 함 만들어 보았습니다.

더나은 방법이나 잘못된 부분에 대하여 많은 지적 부탁드리겠습니다.^^


<?php
class Board extends Controller {

	/**
	 * 초기화
	 *
	 *
	 * @access	public
	 * @param	mixed
	 * @param	string
	 * @return	void
	 */
	function Board()
	{
		parent::Controller();	

		// 로드 : 세션
		$this->load->library('session');
		
		// 로드 : 공용
		$this->load->library('common');
		
		// CI 설치폴더
		$this->ci_dir = CI_ROOT;
		
		// 메뉴폴더
		$this->base_dir = $this->uri->segment(2);	

		// 기본링크
		$this->link_url = '/'.$this->ci_dir.'/'.$this->base_dir.'/';

		// 로드 : 모델
		$this->load->model(''.$this->base_dir.'_model');

		// 정의 : 페이지네이션 이동값
		$this->limit = PER_PAGE;
	}
	
	/**
	 * 메인 재매핑
	 *
	 *
	 * @access	public
	 * @param	mixed
	 * @param	string
	 * @return	void
	 */
	function _remap($method)
	{
		// 네비명
		$config['base_navy']= 'Home >  게시판';
		
		// 메뉴정의
		$config['menu_arr'] = array(
					  '메뉴1' => array(
										array('서브1' => '_self^'.$this->link_url.'list1'),
										array('서브2' => '_self^'.$this->link_url.'list2'),
										array('서브3' => '_self^'.$this->link_url.'list3')
				                        ),
					  '메뉴2' => array(
										array('서브1' => '_self^list4'),
										array('서브2' => '_self^list5'),
										array('서브3' => '_self^list6')
				                        )
			            );

		// 상단정의
		$this->load->view(''.TOP_DIR.'',$config);

		// 메쏘드 유무를 체크해서 가변함수 처리하기
		if ( method_exists($this,$method.'_method'))
		{
			$this->{"{$method}_method"}();
		}
		else
		{
			$data['url']= 'sample'; 
			$this->load->view(''.$this->link_url.''.$method,$data);
		} 		

		// 하단정의
		$this->load->view(''.FOOT_DIR.'');	
		
	}


	/**
	 * 목록
	 *
	 *
	 * @access	public
	 * @param	mixed
	 * @param	string
	 * @return	void
	 */
	function list_method()
	{
		// 설정
		$table_name = "board"; // Table name
		$search = ""; // Search Segment (ex : /id/test/name/test)
		$model_name = "select_entry"; // Model name
		$file_name = "list"; // View name (*.php)
		
		// 결과
		$data= $this->common->set_listing($table_name,$search,$model_name);
		$this->load->view(''.$this->link_url.''.$file_name.'',$data);			
	}


	/**
	 * 쓰기
	 *
	 *
	 * @access	public
	 * @param	mixed
	 * @param	string
	 * @return	void
	 */
	function write_method()
	{
		$this->_set_validation('write');
				
		// 본문정의
		if ($this->form_validation->run() == FALSE)
		{
			$this->load->view(''.$this->link_url.'write');
		}
		else
		{
			$data = array(
			// phpMyAdmin CI Auto Query 이용 (쿼리실수 방지)
			// 포럼주소 : http://codeigniter-kr.org/tip/view/92/page/1
			);	
			
			//INSERT 처리
			$this->db->insert('board', $data);
			
			// 완료처리
			redirect(''.$this->link_url.'board');	

		}	
	}


	/**
	 * 폼체크 (공용)
	 *
	 *
	 * @access	public
	 * @param	mixed
	 * @param	string
	 * @return	void
	 */
	function _set_validation($type)
	{
		//에러문구 관련 정의
		$this->common->set_validateion();
		
		// 폼체크
		if($type == "write")
		{
			$config = array(
  			array('field'=>'name', 'label'=>'이름을', 'rules'=>'trim|required|is_natural'),
			array('field'=>'email', 'label'=>'이메일을', 'rules'=>'trim|valid_email|is_natural'),
			array('field'=>'title', 'label'=>'제목을', 'rules'=>'trim|required|is_natural')
			);				

		} 

		$this->form_validation->set_rules($config);
	}	

}
?>

 다음글 flash 업로드시 세션문제 해결 (4)
 이전글 [팁] CI 페이지네이션 일련번호

댓글

맥스 / 2009/08/15 01:50:01 / 추천 0
remap의 경우 정의 되지 않은 메소드를 처리하는 것은 좋은 방법인것 같습니다. 하지만 ci세상님께서 말씀하신 방법으로 레이아웃을 짜게 되면 view를 만들때마다 div를 정의 해야되서 나중에 div에 대한 class나 id가 바뀔때 손대야 하는 화일의 갯수가 많아진는 단점이 생기더라구요.

저같은 경우에는 각각의 레이아웃을 만듭니다. 두가지 내지는 세가지 정도가 되겠지요 좌측 메뉴가 있는 경우 없는 경우 아니면 빈페이지인 경우
그럼 그상태에서 각각의 뷰페이지에서 $this->load->view('xxx',$xxx,TRUE)로해서 데이터로 넘겨줍니다. 그럼 디자이너도 한페이지에서 작업을 할수 있으니 손대는 화일이 적어져서 편해지지요

단점은 구성자체가 단조로워지는 단점이 있겠습니다.