language:php:codeigniter:tutorial
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
language:php:codeigniter:tutorial [2013/06/03 23:12] – 새로 만듦 kieuns | language:php:codeigniter:tutorial [2024/04/23 22:45] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ====== Tutorial - News section ====== | ||
+ | |||
+ | 동적 컨텐츠 생성과 database를 사용하는 튜토리얼. | ||
+ | |||
+ | ===== Setting up your model ===== | ||
+ | |||
+ | 컨트롤러가 DB 직접 쓰지 않고, 모델이 DB에 쓰도록 만들어서, | ||
+ | |||
+ | **application/ | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | class News_model extends CI_Model { | ||
+ | public function __construct() { | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **CI_Model**로부터 상속되어 database 라이브러리를 로드한다. **$this-> | ||
+ | |||
+ | 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) | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | db와 모델이 설정되었다. db로부터 데이터를 읽어올 메소드가 필요하다. CodeIgniter 의 db를 추상화한 레이어 (abstraction layer), **Active Record**를 사용한다. | ||
+ | |||
+ | <code php> | ||
+ | public function get_news( $slug = FALSE ) | ||
+ | { | ||
+ | if( $slug == FALSE ) | ||
+ | { | ||
+ | $query = $this-> | ||
+ | return $query-> | ||
+ | } | ||
+ | $query = $this-> | ||
+ | return $query-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 이 코드로 두 종류의 쿼리를 얻을 수 있다. 첫번째는 전부, 두번째는 slug 에 의한 news만. **$slug** 변수에 대해서 그다지 신경쓰지 않았을텐데, | ||
+ | |||
+ | ===== Display the news ===== | ||
+ | |||
+ | 쿼리 작성은 완료되었다. (오호) 모델은 뉴스를 출력할 뷰와 연결되어야 한다. 모델과 뷰를 바로 연결하지 않고 컨트롤러를 거쳐 연동된다. (이전의 static page를 만드는 방법처럼) | ||
+ | " | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | class News extends CI_Controller { | ||
+ | public function __construct() { | ||
+ | paret:: | ||
+ | $this-> | ||
+ | } // 컨트롤러가 모델을 사용하는구나. | ||
+ | public function index() { | ||
+ | $data[' | ||
+ | } | ||
+ | public function view( $slug ) { | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 생성자에서 부모의 생성자를 실행 시켜 (parent:: | ||
+ | |||
+ | 다음, 두개의 메소드를 추가 했다. index()는 기본으로 호출되는 함수로 모든 뉴스를 불러온다. view() 함수는 $slug 파라미터를 받아, $slug에 매치 되는 뉴스만 읽어온다. (위의 위의 코드) | ||
+ | |||
+ | db에서 읽어온 모든 뉴스는 $data[' | ||
+ | |||
+ | 위의 코드는 컨트롤러가 모델을 사용해 뉴스 데이터를 읽어오기만 했다. 다음과 같이 고쳐서, 뷰에 반영되도록 수정한다. | ||
+ | |||
+ | <code php> | ||
+ | public function index() | ||
+ | { | ||
+ | $data[' | ||
+ | $data[' | ||
+ | |||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 위의 코드는 뉴스 데이터를 모델로부터 읽어와서 변수에 저장한다. 타이틀을 위한 변수, $data[' | ||
+ | |||
+ | **application/ | ||
+ | |||
+ | <code php> | ||
+ | <?php foreach ($news as $news_item): | ||
+ | < | ||
+ | <div id=" | ||
+ | <?php echo $news_item[' | ||
+ | </ | ||
+ | < | ||
+ | <?php endforeach ?> | ||
+ | </ | ||
+ | |||
+ | 모든 뉴스항목이 반복처리 되어 화면에 표시된다. 이 코드는 php와 html을 mix 해서 사용했지만 템플릿을(template language) 사용하고 싶다면 CodeIgniter의 [[http:// | ||
+ | |||
+ | 뉴스 전체를 보는 페이지는 완료 되었다. 개별 뉴스를 보는 페이지는 아직 없다. ($slug를 사용하는 페이지) 모델에는 이미 기능이 추가 되어 있으므로 컨트롤러에 새 뷰를 위한 함수를 추가한다. | ||
+ | |||
+ | <code php> | ||
+ | public function view($slug) { | ||
+ | $data[' | ||
+ | |||
+ | if (empty($data[' | ||
+ | show_404(); | ||
+ | } | ||
+ | $data[' | ||
+ | |||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 파라미터 없는 get_news()를 사용하는 대신, $slug를 파라미터로 넘겨주었다. 결과, 특정 검색 결과의 뉴스만 출력된다. 다음 할일은, 컨트롤러에 응답하는 뷰 페이지를 추가하는 것. | ||
+ | |||
+ | **application/ | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | echo '< | ||
+ | echo $news_item[' | ||
+ | </ | ||
+ | |||
+ | {{tag> CodeIgniter Tutorial}} |