DataTable Control: Client-side Pagination

Paginationという聞きなれない言葉は、下図のような表現によって(テーブルの)ページへの遷移を効率化することをさす。

タイトルにClient-sideとあるのは、クライアント(=Script)がサーバーにデータを取得に行き、それをもとに上のスタイルを形成するためである。
大抵のAjaxライブラリーには、このPaginationの機能があるものと思うが、画面に表示するページ番号の計算などを自動的にやってくれるので、ありがたい。
下は、最後のページへ遷移したときの画面である。

このサンプルでは、サーバーのPHPプログラムを呼んで、JSONデータを取得している。
YUIのExample/assets/php/json_proxy.php
このPHPプログラムは、JSON.phpをrequireしているので、自分の環境にない場合には、Pear::Services_JSONのページよりダウンロードして、PEAR配下においてincludeする必要がある。

以下にJavascriptを含むHTMLの全文を示す。ソース中にある「ajax_yui_datatable_clientside_pagination.Proxy.php」は、json_proxy.phpをrenameして、配置を変えたものである。
ソースを見ると、非常に簡単に、paginationができることがわかる。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>Ajax Sample</title> 
 
<style type="text/css"> 
body {
	margin:0;
	padding:0;
}
</style> 

<link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" /> 
<link rel="stylesheet" type="text/css" href="scripts/yui/paginator/assets/skins/sam/paginator.css" /> 
<link rel="stylesheet" type="text/css" href="scripts/yui/datatable/assets/skins/sam/datatable.css" /> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> 
<script type="text/javascript" src="scripts/yui/connection/connection-min.js"></script> 
<script type="text/javascript" src="scripts/yui/json/json-min.js"></script> 
<script type="text/javascript" src="scripts/yui/element/element-beta-min.js"></script> 
<script type="text/javascript" src="scripts/yui/paginator/paginator-min.js"></script> 
<script type="text/javascript" src="scripts/yui/datasource/datasource-min.js"></script> 
<script type="text/javascript" src="scripts/yui/datatable/datatable-min.js"></script> 

<style type="text/css" id="defaultstyle">
#main {
	margin: 2px;
	padding: 3px;
}
/*
#paginated {
    text-align: center;
}
*/
#paginated table {
    margin-left:20px; 
    margin-right:auto;
}

#paginated, #paginated .yui-dt-loading {
/*    text-align: center; */
    background-color: transparent;
}
</style>

<script type="text/javascript"> 
YAHOO.util.Event.addListener(window, "load", function() {

	YAHOO.example.ClientPagination = function() {
        var myColumnDefs = [
	    {key:"id", label:"ID"},
            {key:"name", label:"Name"},
            {key:"date", label:"Date"},
            {key:"price", label:"Price"},
            {key:"number", label:"Number"}
   		];
                 
        var myDataSource = new YAHOO.util.DataSource("ajax_yui_datatable_clientside_pagination.Proxy.php?");
        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        myDataSource.responseSchema = {
        	resultsList: "records",
        	fields: ["id","name","date","price","number"]
        };

        // Pagenatorを生成し、DataTableのコンフィグ属性(paginator)として定義する。
        // API DOC(http://developer.yahoo.com/yui/docs/YAHOO.widget.DataTable.html)
        // のConfiguration Attributesを参照
        var paging = new YAHOO.widget.Paginator({
			rowsPerPage: 15
        });
        
        var oConfigs = {
        	paginator: paging,
            initialRequest: "results=504"
            };

        // DataTableにPaginatorを食わせる。
		var myDataTable = new YAHOO.widget.DataTable("paginated", myColumnDefs,
        					myDataSource, oConfigs);
        
        return {
            oDS: myDataSource,
            oDT: myDataTable
        };
    }();
});
</script>
</head> 
 
<body class=" yui-skin-sam">
<div id="main">
<p>Paginationのサンプルです</p>
<div id="paginated"></div> 
</div>
</body> 
</html>