라우터를 수정한다.
# app/config/routes.php
$route['board/(:num)'] = 'board/index';
// board/(페이지번호) 오도록
$route['board/create'] = 'board/create';
$route['board/store']['post'] = 'board/store';
$route['board/edit/(:num)'] = 'board/edit/$1';
$route['board/update/(:num)']['put'] = 'board/update/$1';
$route['board/delete/(:num)']['delete'] = 'board/delete/$1';
index 페이지에 리스트가 있으므로
컨트롤러의 index()에 페이지네이션을 로드한다.
public function index()
{
$this->load->library('pagination');
$config['base_url'] = '/board/';
// 총 게시물 수 : 모델을 가져온다. ('타입', limit개수, 페이지)
$config['total_rows'] = $this->board_model->getAll('count', 0, 0);
$config['per_page'] = 3;
// 페이지를 불러올 segment. /board/의 뒷자리라서 2
$config['uri_segment'] = 2;
// 이니셜라이즈 및 생성
$this->pagination->initialize($config);
// 현재페이지. 3항다항식. if문 짧게 쓴다. 세그먼트(2)가 있다면 그것을, 없다면(첫 화면) 0을 넣는다.
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
// data 배열에 담긴 것들은
$data['pages'] = $this->pagination->create_links();
$data['articles'] = $this->board_model->getAll('all', $config['per_page'], $page);
// (all 데이터, 총 몇 개씩 자를 것인지, 현재 페이지)
// 합해서 list로 넘어간다.
$this->load->view('board/list', $data);
모델을 수정한다. getAll()
에 3개의 매개변수가 들어간다.
페이지네이션 크게 2가지가 필요하다.
// 아무것도 안 들어올 경우 type의 default는 all, $limit는 3개씩 자른다.
public function getAll($type="all", $limit=3, $page=1)
{
if($type=="count") {
$board = $this->db->get('boards')->num_rows();
// num_rows()를 쓰면 개수가 전달된다.
} else {
// $type=="all"
$this->db->limit($limit, $page);
// (, 페이지의 개수): 페이지의 단위만큼 잘라진다.
$this->db->order_by('idx', 'desc');
$board = $this->db->get('boards')->result();
}
return $board;
}