[CI] 페이지네이션

Grace Goh·2023년 4월 2일
0

PHP

목록 보기
17/19

라우터를 수정한다.

# 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가지가 필요하다.

  • 전체 게시물 get
  • 전체 게시물 카운트

    // 아무것도 안 들어올 경우 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;


    }

profile
Español, Inglés, Coreano y Python

0개의 댓글