내용으로 건너뛰기
GINS WIKI 긴스 위키
사용자 도구
로그인
사이트 도구
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
현재 위치:
긴스위키 GINS wiki
»
개발 언어
»
php
»
codeigniter
»
Tutorial - News section
추적:
•
Tutorial - News section
검색
language:php:codeigniter:tutorial
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Tutorial - News section ====== 동적 컨텐츠 생성과 database를 사용하는 튜토리얼. ===== Setting up your model ===== 컨트롤러가 DB 직접 쓰지 않고, 모델이 DB에 쓰도록 만들어서, 후에 다시 사용할 수 있게 한다. 모델은 DB에 insert,update,select 를 하거나 그외 데이터를 관리하는 곳이다. 모델은 데이터를 관리하는 부분. **application/models** 폴더에 **news_model.php** 파일을 만든다. 아래 코드를 추가한다. DB에 제대로 접속하게 설정했는지 확인하는 것은 필수. <code php> <?php class News_model extends CI_Model { public function __construct() { $this->load->database(); } } </code> **CI_Model**로부터 상속되어 database 라이브러리를 로드한다. **$this->db** 오브젝트를 활성화 한다. db에 쿼리를 날리기 위해, db 스키마를 만든다. db에 접속해서 아래 쿼리를 실행해서 테이블을 추가하고 테스트용 데이터를 넣는다. <code sql> 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) ); </code> db와 모델이 설정되었다. db로부터 데이터를 읽어올 메소드가 필요하다. CodeIgniter 의 db를 추상화한 레이어 (abstraction layer), **Active Record**를 사용한다. '쿼리'를 한번만 사용해도 지원하는 [[http://ellislab.com/codeigniter/user-guide/general/requirements.html|모든 DB]]에 동작하도록 되어 있다. 아래의 코드를 추가한다. <code php> 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(); } </code> 이 코드로 두 종류의 쿼리를 얻을 수 있다. 첫번째는 전부, 두번째는 slug 에 의한 news만. **$slug** 변수에 대해서 그다지 신경쓰지 않았을텐데, ActiveRecord가 알아서 처리해줬기 때문이다. ===== Display the news ===== 쿼리 작성은 완료되었다. (오호) 모델은 뉴스를 출력할 뷰와 연결되어야 한다. 모델과 뷰를 바로 연결하지 않고 컨트롤러를 거쳐 연동된다. (이전의 static page를 만드는 방법처럼) "news"라는 새 컨트롤러를 **application/controllers/news.php** 파일에 추가한다. <code php> <?php class News extends CI_Controller { public function __construct() { paret::__construct(); $this->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 ); } } </code> 생성자에서 부모의 생성자를 실행 시켜 (parent::__construct();) 모델을 로딩하게 한 다음, 이 컨트롤러에서 모두 모델을 쓸 수 있게 했다. 다음, 두개의 메소드를 추가 했다. index()는 기본으로 호출되는 함수로 모든 뉴스를 불러온다. view() 함수는 $slug 파라미터를 받아, $slug에 매치 되는 뉴스만 읽어온다. (위의 위의 코드) db에서 읽어온 모든 뉴스는 $data['news'] 에 저장된다. 위의 코드는 컨트롤러가 모델을 사용해 뉴스 데이터를 읽어오기만 했다. 다음과 같이 고쳐서, 뷰에 반영되도록 수정한다. <code php> 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'); } </code> 위의 코드는 뉴스 데이터를 모델로부터 읽어와서 변수에 저장한다. 타이틀을 위한 변수, $data['title'] 뿐만 아니라 모든 데이터가 저장되어 뷰로 전달된다. 뷰를 위한 코드를 추가한다. **application/views/news/index.php** 파일을 추가한다. <code php> <?php foreach ($news as $news_item): ?> <h2><?php echo $news_item['title'] ?></h2> <div id="main"> <?php echo $news_item['text'] ?> </div> <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p> <?php endforeach ?> </code> 모든 뉴스항목이 반복처리 되어 화면에 표시된다. 이 코드는 php와 html을 mix 해서 사용했지만 템플릿을(template language) 사용하고 싶다면 CodeIgniter의 [[http://ellislab.com/codeigniter/user-guide/libraries/parser.html|Template Parser]]나 외부 파서를 사용해도 된다. 뉴스 전체를 보는 페이지는 완료 되었다. 개별 뉴스를 보는 페이지는 아직 없다. ($slug를 사용하는 페이지) 모델에는 이미 기능이 추가 되어 있으므로 컨트롤러에 새 뷰를 위한 함수를 추가한다. <code php> 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'); } </code> 파라미터 없는 get_news()를 사용하는 대신, $slug를 파라미터로 넘겨주었다. 결과, 특정 검색 결과의 뉴스만 출력된다. 다음 할일은, 컨트롤러에 응답하는 뷰 페이지를 추가하는 것. **application/views/news/view.php** 파일에 다음 코드를 추가한다. <code php> <?php echo '<h2>'.$news_item['title'].'</h2>'; echo $news_item['text']; </code> {{tag> CodeIgniter Tutorial}}
language/php/codeigniter/tutorial.txt
· 마지막으로 수정됨: 2024/04/23 22:45 저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
맨 위로