【CodeIgniter】ページネーション機能を実装する方法
CodeIgniterでページネーションを実装する方法です。
完成図は以下となります。
もくじ
それではまとめていきます。
1.CodeIgniterの初期設定
DBの作成
DB名:ci_site
テーブル名:table
カラム数:3
∟ id, title, content
オートロード設定を行なう
編集ファイル:application/config/autoload.php
// $autoload['libraries'] = array();
$autoload['libraries'] = array("database");
// $autoload['helper'] = array();
$autoload['helper'] = array("url");
ベースURLの設定
編集ファイル:application/config/config.php
// $config['base_url'] = 'http://localhost/pagination/';
$config['base_url'] = '';
当記事では、CodeIgniterのフォルダ名を『pagination』としています。
データベースのコネクション設定をする
編集ファイル:application/config/database.php
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
$db['default']['database'] = 'ci_site';
2.ページネーションを利用するためのコントローラーを作成する
デフォルトコントローラーを設定する
編集ファイル:application/config/routes.php
// $route['default_controller'] = "welcome";
$route['default_controller'] = "site";
それでは、siteコントローラーを作っていきます。
siteコントローラーを作成して、ページネーションライブラリを読み込む
新規作成ファイル:application/controller/site.php
load->library("pagination");
}
}
サイトコントローラー利用時のベースURL設定をする
編集ファイル:application/controller/site.php
function index(){
$this->load->library("pagination");
// ページネーション処理が含まれるコントローラクラス/ メソッドへの完全な URL
// http://localhost/pagination/index.php/site/index
// /http://localhost/pagination/index.php/コントローラー名/ファンクション名
$config["base_url"] = "http://localhost/pagination/index.php/site/index";
}
ページネーション処理に必要な情報をconfigに格納し、イニシャライズする
編集ファイル:application/controller/site.php
// データベースから合計の行数を取得する
$config["total_rows"] = $this->db->get("data")->num_rows();
// 1ページにいくつの記事を表示するか設定する
$config["per_page"] = 3;
// 選択中のページ番号の前後に表示したい "数字" リンクの数。
// たとえば、3を指定すると、 次の写真ように、現在のページのページ番号の両脇に3つの番号リンクが置かれます。
$config["num_links"] = 3;
$this->pagination->initialize($config);
記事を出力するためのデータをGETする
編集ファイル:application/controller/site.php
// get("①", "②", "③")
// ①テーブル名
// ②引っ張るデータの数
// ③オフセット(※あとで解説します)
$data["records"] = $this->db->get("data", $config["per_page"], $this->uri->segment(3));
$this->load->view("site_view", $data);
最後にsite_viewにデータをわたしています。
ここでページをロードすると以下のエラーメッセージがでてきます。
An Error Was Encountered
Unable to load the requested file: site_view.php
それでは、site_viewを作っていきます。
site_viewを作成する
新規作成ファイル:application/views/site_view.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Welcome to CodeIgniter</title>
</head>
<body>
<div id="container">
<h1>ページネーションの作成</h1>
<?php
echo $this->pagination->create_links();
?>
</div>
</body>
</html>
これでページネーションリンクが完成します。
1から順番にリンクをクリックしてみてください。
以下のように変化するはずです。
http://localhost/pagination/index.php/site/index/
http://localhost/pagination/index.php/site/index/3
http://localhost/pagination/index.php/site/index/6
http://localhost/pagination/index.php/site/index/9
….etc
たとえば、
http://localhost/pagination/index.php/site/index/3
上記のURLはデータベースのカラムから情報を引っ張った際に、『最初の3行は無視すること』を意味しています。
先ほど、以下のコードでそのように設定したためです。
// 1ページにいくつの記事を表示するか設定する
$config["per_page"] = 3;
また、以下のコードのオフセット部分
$data["records"] = $this->db->get("data", $config["per_page"], $this->uri->segment(3));
セグメント3とは以下のURLの『3』の部分をさしています。
/site/index/3
これを第3セグメントといいます。
今回のページネーションでは、第3引数が変化することにより、ページネーションを実現しています。よって、オフセットは3と設定しました。
つぎに、DBから情報を引っ張り、ページに表示していきます。
その際に、HTMLテーブルクラスが便利です。
3.HTMLテーブルクラスを利用する
HTMLテーブルライブラリを読み込む
編集ファイル:application/controller/site.php
function index(){
$this->load->library("pagination");
$this->load->library("table");
generateメソッドを利用する
編集ファイル:application/views/site_view.php
// site.phpで $data["records"]で情報を取得したことを思い出してください。
echo $this->table->generate($records);
echo $this->pagination->create_links();
さいごに、、、。
写真をみてお分かりの通り、テーブルのヘッダー部分がださいです。
そこだけ修正してしまいましょう。
編集ファイル:application/controller/site.php
function index(){
$this->load->library("pagination");
$this->load->library("table");
$this->table->set_heading("番号", "タイトル", "内容");
以上となります。
コードはgithubで公開しています。
manabubannai/Pagination
photo credit: Skyline-Photo via photopin cc
※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。