CI 코드

제목 [팁] 스캐폴드 (Scaffolding) 스킨형식으로 디자인하기
글쓴이 ci세상 작성시각 2009/11/11 00:40:36
댓글 : 0 추천 : 0 스크랩 : 0 조회수 : 17335   RSS

1. 목적 : 스캐폴드 뷰를 커스트마이즈 할 수 있는 부분을 추가하기 위하여 만들어 보았습니다.

2. 비교 : cakephp에 기본적으로 지원되는 기능을 codeigniter에서도 지원해 주기 위함이 있습니다.

3. 주의 : 기본코어 소스를 일부 만지는 부분이 발생하기 때문에 꼭 필요한 분만 사용해 주시기 바랍니다.

4. 테스트환경 : ci 1.7.2 / apmsetup / 윈도우xp

system/libraries/Controller.php (코어수정 : 확장이 안되기 때문에 어쩔 수 없이 만지는 부분입니다.)
108줄
	function _ci_scaffolding()
	{
		if ($this->_ci_scaffolding === FALSE OR $this->_ci_scaff_table === FALSE)
		{
			show_404('Scaffolding unavailable');
		}
		
		$method = ( ! in_array($this->uri->segment(3), array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete'), TRUE)) ? 'view' : $this->uri->segment(3);

		require_once(BASEPATH.'scaffolding/Scaffolding'.EXT);
		$scaff = new Scaffolding($this->_ci_scaff_table,$this->_ci_scaff_skin);
		$scaff->$method();
	}
system/application/libraries/MY_Loader.php 파일 추가
<?
/**
* 스캐폴더 스킨으로 구분하기 (2009년 11월 ci세상)
*
*/	
class MY_Loader extends CI_Loader {

	function scaffolding($table = '', $skin = '')
	{		
		if ($table === FALSE)
		{
			show_error('You must include the name of the table you would like to access when you initialize scaffolding');
		}
		
		$CI =& get_instance();
		$CI->_ci_scaffolding = TRUE;
		$CI->_ci_scaff_table = $table;
		$CI->_ci_scaff_skin = $skin;
	}

}

scaffolding/Scaffolding.php

	function Scaffolding($db_table,$skin_name)
	{
		$this->CI =& get_instance();
		
		$this->CI->load->database("", FALSE, TRUE);			
		$this->CI->load->library('pagination');
		
		// Turn off caching
		$this->CI->db->cache_off();
				
		/**
		 * Set the current table name
		 * This is done when initializing scaffolding:
		 * $this->load->scaffolding('table_name')
		 *
		 */
		$this->current_table = $db_table;
		
		/**
		 * Set the path to the "view" files
		 * We'll manually override the "view" path so that
		 * the load->view function knows where to look.
		 */
		
		$this->CI->load->_ci_view_path = BASEPATH.'scaffolding/'.$skin_name.'/views/';

		// Set the base URL
		$this->base_url = $this->CI->config->site_url().'/'.$this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'both');
		$this->base_uri = $this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'leading');

		// Set a few globals
		$data = array(
						'image_url'	=> $this->CI->config->system_url().'scaffolding/'.$skin_name.'/images/',
						'base_uri'  => $this->base_uri,
						'base_url'	=> $this->base_url,
						'title'		=> $this->current_table
					);
		
		$this->CI->load->vars($data);
		
		// Load the language file and create variables
		$this->lang = $this->CI->load->scaffold_language('scaffolding', '', TRUE);
		$this->CI->load->vars($this->lang);
				
		//  Load the helper files we plan to use
		$this->CI->load->helper(array('url', 'form'));
		
				
		log_message('debug', 'Scaffolding Class Initialized');
	}

<스킨폴더 위치>
system/scaffolding/스킨폴더명


<컨트롤러에서 사용시>

$this->load->scaffolding('테이블명','스킨폴더명');

=> 위와같이 스킨폴더명을 지정하는것이 하나 더 추가가 됨으로써 codeigniter도 스캔폴더를 개발자가 다양하게 디자인을 해서 사용할 수 있습니다.


파일첨부로 전체소스 올려둡니다.
첨부파일 scaffolding_full.zip (401.1 KB)
 다음글 [팁] 큐브리드 (CUBRID) 모듈배포 v1 (4)
 이전글 위지윅에디터 ckeditor 사용하기(CodeIgnit... (5)

댓글

없음