====== Tutorial - News section ====== 동적 컨텐츠 생성과 database를 사용하는 튜토리얼. ===== Setting up your model ===== 컨트롤러가 DB 직접 쓰지 않고, 모델이 DB에 쓰도록 만들어서, 후에 다시 사용할 수 있게 한다. 모델은 DB에 insert,update,select 를 하거나 그외 데이터를 관리하는 곳이다. 모델은 데이터를 관리하는 부분. **application/models** 폴더에 **news_model.php** 파일을 만든다. 아래 코드를 추가한다. DB에 제대로 접속하게 설정했는지 확인하는 것은 필수. load->database(); } } **CI_Model**로부터 상속되어 database 라이브러리를 로드한다. **$this->db** 오브젝트를 활성화 한다. db에 쿼리를 날리기 위해, db 스키마를 만든다. db에 접속해서 아래 쿼리를 실행해서 테이블을 추가하고 테스트용 데이터를 넣는다. CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(128) NOT NULL, slug varchar(128) NOT NULL, text text NOT NULL, PRIMARY KEY (id), KEY slug (slug) ); db와 모델이 설정되었다. db로부터 데이터를 읽어올 메소드가 필요하다. CodeIgniter 의 db를 추상화한 레이어 (abstraction layer), **Active Record**를 사용한다. '쿼리'를 한번만 사용해도 지원하는 [[http://ellislab.com/codeigniter/user-guide/general/requirements.html|모든 DB]]에 동작하도록 되어 있다. 아래의 코드를 추가한다. public function get_news( $slug = FALSE ) { if( $slug == FALSE ) { $query = $this->db->get('news'); return $query->result_array(); } $query = $this->db->get_where( 'news', array('slug'=>$slug) ); return $query->row_array(); } 이 코드로 두 종류의 쿼리를 얻을 수 있다. 첫번째는 전부, 두번째는 slug 에 의한 news만. **$slug** 변수에 대해서 그다지 신경쓰지 않았을텐데, ActiveRecord가 알아서 처리해줬기 때문이다. ===== Display the news ===== 쿼리 작성은 완료되었다. (오호) 모델은 뉴스를 출력할 뷰와 연결되어야 한다. 모델과 뷰를 바로 연결하지 않고 컨트롤러를 거쳐 연동된다. (이전의 static page를 만드는 방법처럼) "news"라는 새 컨트롤러를 **application/controllers/news.php** 파일에 추가한다. load->model('news_model'); } // 컨트롤러가 모델을 사용하는구나. public function index() { $data['news'] = $this->news_model->get_news(); } public function view( $slug ) { $data['news'] = $this->news_model->get_news( $slug ); } } 생성자에서 부모의 생성자를 실행 시켜 (parent::__construct();) 모델을 로딩하게 한 다음, 이 컨트롤러에서 모두 모델을 쓸 수 있게 했다. 다음, 두개의 메소드를 추가 했다. index()는 기본으로 호출되는 함수로 모든 뉴스를 불러온다. view() 함수는 $slug 파라미터를 받아, $slug에 매치 되는 뉴스만 읽어온다. (위의 위의 코드) db에서 읽어온 모든 뉴스는 $data['news'] 에 저장된다. 위의 코드는 컨트롤러가 모델을 사용해 뉴스 데이터를 읽어오기만 했다. 다음과 같이 고쳐서, 뷰에 반영되도록 수정한다. public function index() { $data['news'] = $this->news_model->get_news(); $data['title'] = 'News archive'; $this->load->view('templates/header', $data); $this->load->view('news/index', $data); $this->load->view('templates/footer'); } 위의 코드는 뉴스 데이터를 모델로부터 읽어와서 변수에 저장한다. 타이틀을 위한 변수, $data['title'] 뿐만 아니라 모든 데이터가 저장되어 뷰로 전달된다. 뷰를 위한 코드를 추가한다. **application/views/news/index.php** 파일을 추가한다.

View article

모든 뉴스항목이 반복처리 되어 화면에 표시된다. 이 코드는 php와 html을 mix 해서 사용했지만 템플릿을(template language) 사용하고 싶다면 CodeIgniter의 [[http://ellislab.com/codeigniter/user-guide/libraries/parser.html|Template Parser]]나 외부 파서를 사용해도 된다. 뉴스 전체를 보는 페이지는 완료 되었다. 개별 뉴스를 보는 페이지는 아직 없다. ($slug를 사용하는 페이지) 모델에는 이미 기능이 추가 되어 있으므로 컨트롤러에 새 뷰를 위한 함수를 추가한다. public function view($slug) { $data['news_item'] = $this->news_model->get_news($slug); if (empty($data['news_item'])) { show_404(); } $data['title'] = $data['news_item']['title']; $this->load->view('templates/header', $data); $this->load->view('news/view', $data); $this->load->view('templates/footer'); } 파라미터 없는 get_news()를 사용하는 대신, $slug를 파라미터로 넘겨주었다. 결과, 특정 검색 결과의 뉴스만 출력된다. 다음 할일은, 컨트롤러에 응답하는 뷰 페이지를 추가하는 것. **application/views/news/view.php** 파일에 다음 코드를 추가한다. '.$news_item['title'].''; echo $news_item['text']; {{tag> CodeIgniter Tutorial}}