Bootstrap Table 的 Server Side Pagination 簡略解說,也就是讓您從資料庫撈出的資料直接套在表格內,並有分頁、搜尋功能!
Bootstrap Table 的 Server Side PaginationBootstrap Table 網站提供了許多表格讓您直接把資料套用在表格裡,讓您簡單又方便的做出漂亮的表格^ ^!笨兔在此說說有關資料庫的 Server Side Pagination 【Client Side Pagination 部份則按此觀看】。
Client Side Pagination 和 Server Side Pagination 其實大同小異,差別在於:(若不是用於龐大資料,當然 Client Side Pagination 是最方便實用的唄!^^)
Bootstrap Table 主網站及下載:http://bootstrap-table.wenzhixin.net.cn/本小站下載:bootstrap table v1.11.1Server Side Pagination 官網程式碼直接套用即可,主要是要將資料庫撈取出來的資料,產生成 Server Side Pagination 所需的 json 格式檔。所以先簡說一下這個 json 檔須產生成啥樣子的資料格式。
{
"total": 數字,
"rows":[
{
"欄位名稱1":資料1,
"欄位名稱2":資料2,
.
.
"欄位名稱N":資料N
},
{
"欄位名稱1":資料1,
"欄位名稱2":資料2,
.
.
"欄位名稱N":資料N
},
.
.
{
"欄位名稱1":資料1,
"欄位名稱2":資料2,
.
.
"欄位名稱N":資料N
},
]
}
Server Side Pagination 基本上要有二個檔,一個為主網頁檔 (笨兔設 html_024_1.html),一個是主網頁要讀取的資料檔 (笨兔設 html_024_2.php)。
html_024_1.html 主網頁範例程式碼:
程式碼為 Server Side Pagination 基本程式碼,主要為紅色字部份。便順說一下<table>內其中幾項既有的設定語法如下:(其它參數設定按此參閱 bootstrap 文檔)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>喵喵笨兔 の Server Side Pagination Test!!</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-table.css">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/bootstrap-table.js"></script>
</head>
<body>
<div class="container">
<h1>喵喵笨兔 Server Side Pagination Test!!</h1>
<table id="table"
data-toggle="table"
data-side-pagination="server"
data-url="html_024_2.php"
data-height="400"
data-pagination="true"
data-page-list="[5, 10, 20, 50, 100, 200, All]"
data-show-refresh="true"
data-sort-name="l_date"
data-sort-order="asc"
data-search="true"
data-show-columns="true"
data-show-toggle="true"
data-show-pagination-switch="true"
data-detail-view="true"
data-detail-formatter="detailFormatter"
data-page-number="1"
data-page-size="10"
>
<thead>
<tr>
<th data-field="state" data-checkbox="true"></th>
<th data-field="l_date" data-sortable="true">分享日期</th>
<th data-field="l_sort" data-sortable="true">分類</th>
<th data-field="l_number" data-sortable="true">編號</th>
<th data-field="l_description" data-sortable="true">內容說明</th>
<th data-field="l_test">TEST</th>
<th data-field="l_url">View</th> </tr>
</thead>
</table>
</div>
<script>
var $table = $('#table');
$(function () {
});
</script>
<script>
function detailFormatter(index, row) {
var html = [];
$.each(row, function (key, value) {
html.push('<p><b>' + key + ':</b> ' + value + '</p>');
});
return html.join('');
}
</script>
</body>
</html>
html_024_2.php 資料檔範例程式碼:主要為紅色字部份。
以笨兔網站的 MySQL 資料庫,撈取【學習分享】的資料來做展示,範例設定的 MySQL 相關名稱如下。MySQL 連線部份,可參考笨兔另一篇隨手筆記【db_002】PHP 連接 MySQL 資料庫。
<?php //MySQL 函數寫法
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '12345678';
$dbname = 'pcgame';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error with MySQL connect') ;
mysql_query("SET NAMES 'UTF8'");
mysql_select_db($dbname);
//計算總筆數,須把搜尋條件也加入,如此才會顯示搜尋後的總筆數
$sql_t = "SELECT * FROM learn WHERE `l_sort` LIKE '%".$_GET['search']."%' OR `l_description` LIKE '%".$_GET['search']."%'";
$result_t = mysql_query($sql_t) or die('MySQL query error');
$total = mysql_num_rows($result_t);
//配合主網頁按分頁後傳過來的參數,從第$_GET['offset']筆開始共抓取$_GET['limit']筆資料,及那些欄位要對應傳過來的搜尋條件$_GET['search']
//若有使用排序功能,則要加入傳過來的排序欄位$_GET['sort']和排序方式$_GET['order']
$sql = "SELECT * FROM learn WHERE `l_sort` LIKE '%".$_GET['search']."%' OR `l_description` LIKE '%".$_GET['search']."%' ORDER BY ".$_GET['sort']." ".$_GET['order']." LIMIT ".$_GET['offset'].",".$_GET['limit'];
$result = mysql_query($sql) or die('MySQL query error');
$data = [];
while ($row = mysql_fetch_array($result)){
$data[] = [
"l_id" => $row['l_id'], //您資料庫欄位名稱,要轉出那幾個欄位就做幾個
"l_date" => $row['l_date'],
"l_sort" => $row['l_sort'],
"l_number" => $row['l_number'],
"l_description" => $row['l_description'],
"l_test" => $row['l_id'].'_'.$row['l_sort'],
"l_url" => '<a href="'.$row['l_url'].'" target="_blank"><button>View</button></a>'
];}
//顯示資料,看是否與 data 檔格式相同唄!
echo json_encode(array(
'total'=>$total,
'rows'=>$data
));
?>
<?php //PDO 函數寫法
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '12345678';
$dbname = 'pcgame';
try{
$dsn = "mysql:host={$dbhost};dbname={$dbname};charset=utf8";
$conn = new PDO($dsn, $dbuser, $dbpass);
//發生錯誤出現錯誤提醒
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch (PDOException $e){
//發生錯誤結束資料庫連線並顯示錯誤訊息
die($e -> getMessage());
}
//計算總筆數,須把搜尋條件也加入,如此才會顯示搜尋後的總筆數
$sql_t = "SELECT * FROM learn WHERE `l_sort` LIKE '%".$_GET['search']."%' OR `l_description` LIKE '%".$_GET['search']."%'";
$rs_t = $conn -> query($sql_t);
$total = $rs_t -> rowCount();
//配合主網頁按分頁後傳過來的參數,從第$_GET['offset']筆開始共抓取$_GET['limit']筆資料,及那些欄位要對應傳過來的搜尋條件$_GET['search']
//若有使用排序功能,則要加入傳過來的排序欄位$_GET['sort']和排序方式$_GET['order']
$sql = "SELECT * FROM learn WHERE `l_sort` LIKE '%".$_GET['search']."%' OR `l_description` LIKE '%".$_GET['search']."%' ORDER BY ".$_GET['sort']." ".$_GET['order']." LIMIT ".$_GET['offset'].",".$_GET['limit'];
$rs = $conn -> prepare($sql);
$rs -> execute();
$data = [];
while ($row = $rs -> fetch(PDO::FETCH_ASSOC)){
$data[] = [
"l_id" => $row['l_id'], //您資料庫欄位名稱,要轉出那幾個欄位就做幾個
"l_date" => $row['l_date'],
"l_sort" => $row['l_sort'],
"l_number" => $row['l_number'],
"l_description" => $row['l_description'],
"l_test" => $row['l_id'].'_'.$row['l_sort'],
"l_url" => '<a href="'.$row['l_url'].'" target="_blank"><button>View</button></a>'
];}
//顯示資料,看是否與 data 檔格式相同唄!
echo json_encode(array(
'total'=>$total,
'rows'=>$data
));
?>