annotate DataTables-1.9.4/examples/server_side/server_side.html @ 7:0f2b740536fb draft

Uploaded
author saskia-hiltemann
date Mon, 21 Aug 2017 09:16:07 -0400
parents ac5f9272033b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
2 <html>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
3 <head>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
5 <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" />
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
6
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
7 <title>DataTables example</title>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
8 <style type="text/css" title="currentStyle">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
9 @import "../../media/css/demo_page.css";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
10 @import "../../media/css/demo_table.css";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
11 </style>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
12 <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
13 <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
14 <script type="text/javascript" charset="utf-8">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
15 $(document).ready(function() {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
16 $('#example').dataTable( {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
17 "bProcessing": true,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
18 "bServerSide": true,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
19 "sAjaxSource": "scripts/server_processing.php"
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
20 } );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
21 } );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
22 </script>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
23 </head>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
24 <body id="dt_example">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
25 <div id="container">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
26 <div class="full_width big">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
27 DataTables server-side processing example
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
28 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
29
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
30 <h1>Preamble</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
31 <p>There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.</p>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
32 <p>The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.</p>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
33
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
34 <h1>Live example</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
35 <div id="dynamic">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
36 <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
37 <thead>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
38 <tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
39 <th width="20%">Rendering engine</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
40 <th width="25%">Browser</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
41 <th width="25%">Platform(s)</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
42 <th width="15%">Engine version</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
43 <th width="15%">CSS grade</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
44 </tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
45 </thead>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
46 <tbody>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
47 <tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
48 <td colspan="5" class="dataTables_empty">Loading data from server</td>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
49 </tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
50 </tbody>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
51 <tfoot>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
52 <tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
53 <th>Rendering engine</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
54 <th>Browser</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
55 <th>Platform(s)</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
56 <th>Engine version</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
57 <th>CSS grade</th>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
58 </tr>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
59 </tfoot>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
60 </table>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
61 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
62 <div class="spacer"></div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
63
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
64
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
65 <h1>Initialisation code</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
66 <pre class="brush: js;">$(document).ready(function() {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
67 $('#example').dataTable( {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
68 "bProcessing": true,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
69 "bServerSide": true,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
70 "sAjaxSource": "scripts/server_processing.php"
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
71 } );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
72 } );</pre>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
73 <style type="text/css">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
74 @import "../examples_support/syntax/css/shCore.css";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
75 </style>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
76 <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
77
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
78 <h1>Server response</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
79 <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
80 <pre id="latest_xhr" class="brush: js;"></pre>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
81
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
82 <h1>Server side (PHP) code</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
83 <pre>&lt;?php
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
84 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
85 * Easy set variables
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
86 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
87
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
88 /* Array of database columns which should be read and sent back to DataTables. Use a space where
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
89 * you want to insert a non-database field (for example a counter or static image)
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
90 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
91 $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
92
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
93 /* Indexed column (used for fast and accurate table cardinality) */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
94 $sIndexColumn = "id";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
95
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
96 /* DB table to use */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
97 $sTable = "ajax";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
98
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
99 /* Database connection information */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
100 $gaSql['user'] = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
101 $gaSql['password'] = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
102 $gaSql['db'] = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
103 $gaSql['server'] = "localhost";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
104
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
105 /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
106 include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
107
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
108
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
109 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
110 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
111 * no need to edit below this line
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
112 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
113
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
114 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
115 * Local functions
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
116 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
117 function fatal_error ( $sErrorMessage = '' )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
118 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
119 header( $_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error' );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
120 die( $sErrorMessage );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
121 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
122
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
123
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
124 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
125 * MySQL connection
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
126 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
127 if ( ! $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
128 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
129 fatal_error( 'Could not open connection to server' );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
130 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
131
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
132 if ( ! mysql_select_db( $gaSql['db'], $gaSql['link'] ) )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
133 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
134 fatal_error( 'Could not select database ' );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
135 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
136
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
137
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
138 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
139 * Paging
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
140 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
141 $sLimit = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
142 if ( isset( $_GET['iDisplayStart'] ) &amp;&amp; $_GET['iDisplayLength'] != '-1' )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
143 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
144 $sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
145 intval( $_GET['iDisplayLength'] );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
146 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
147
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
148
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
149 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
150 * Ordering
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
151 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
152 $sOrder = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
153 if ( isset( $_GET['iSortCol_0'] ) )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
154 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
155 $sOrder = "ORDER BY ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
156 for ( $i=0 ; $i&lt;intval( $_GET['iSortingCols'] ) ; $i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
157 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
158 if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
159 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
160 $sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
161 ($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
162 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
163 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
164
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
165 $sOrder = substr_replace( $sOrder, "", -2 );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
166 if ( $sOrder == "ORDER BY" )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
167 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
168 $sOrder = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
169 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
170 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
171
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
172
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
173 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
174 * Filtering
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
175 * NOTE this does not match the built-in DataTables filtering which does it
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
176 * word by word on any field. It's possible to do here, but concerned about efficiency
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
177 * on very large tables, and MySQL's regex functionality is very limited
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
178 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
179 $sWhere = "";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
180 if ( isset($_GET['sSearch']) &amp;&amp; $_GET['sSearch'] != "" )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
181 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
182 $sWhere = "WHERE (";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
183 for ( $i=0 ; $i&lt;count($aColumns) ; $i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
184 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
185 $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
186 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
187 $sWhere = substr_replace( $sWhere, "", -3 );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
188 $sWhere .= ')';
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
189 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
190
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
191 /* Individual column filtering */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
192 for ( $i=0 ; $i&lt;count($aColumns) ; $i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
193 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
194 if ( isset($_GET['bSearchable_'.$i]) &amp;&amp; $_GET['bSearchable_'.$i] == "true" &amp;&amp; $_GET['sSearch_'.$i] != '' )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
195 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
196 if ( $sWhere == "" )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
197 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
198 $sWhere = "WHERE ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
199 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
200 else
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
201 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
202 $sWhere .= " AND ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
203 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
204 $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
205 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
206 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
207
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
208
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
209 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
210 * SQL queries
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
211 * Get data to display
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
212 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
213 $sQuery = "
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
214 SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
215 FROM $sTable
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
216 $sWhere
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
217 $sOrder
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
218 $sLimit
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
219 ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
220 $rResult = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
221
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
222 /* Data set length after filtering */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
223 $sQuery = "
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
224 SELECT FOUND_ROWS()
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
225 ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
226 $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
227 $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
228 $iFilteredTotal = $aResultFilterTotal[0];
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
229
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
230 /* Total data set length */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
231 $sQuery = "
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
232 SELECT COUNT(`".$sIndexColumn."`)
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
233 FROM $sTable
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
234 ";
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
235 $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
236 $aResultTotal = mysql_fetch_array($rResultTotal);
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
237 $iTotal = $aResultTotal[0];
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
238
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
239
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
240 /*
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
241 * Output
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
242 */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
243 $output = array(
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
244 "sEcho" =&gt; intval($_GET['sEcho']),
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
245 "iTotalRecords" =&gt; $iTotal,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
246 "iTotalDisplayRecords" =&gt; $iFilteredTotal,
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
247 "aaData" =&gt; array()
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
248 );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
249
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
250 while ( $aRow = mysql_fetch_array( $rResult ) )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
251 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
252 $row = array();
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
253 for ( $i=0 ; $i&lt;count($aColumns) ; $i++ )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
254 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
255 if ( $aColumns[$i] == "version" )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
256 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
257 /* Special output formatting for 'version' column */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
258 $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
259 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
260 else if ( $aColumns[$i] != ' ' )
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
261 {
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
262 /* General output */
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
263 $row[] = $aRow[ $aColumns[$i] ];
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
264 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
265 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
266 $output['aaData'][] = $row;
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
267 }
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
268
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
269 echo json_encode( $output );
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
270 ?&gt;</pre>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
271
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
272
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
273 <h1>Other examples</h1>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
274 <div class="demo_links">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
275 <h2>Basic initialisation</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
276 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
277 <li><a href="../basic_init/zero_config.html">Zero configuration</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
278 <li><a href="../basic_init/filter_only.html">Feature enablement</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
279 <li><a href="../basic_init/table_sorting.html">Sorting data</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
280 <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
281 <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
282 <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
283 <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
284 <li><a href="../basic_init/dom.html">DOM positioning</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
285 <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
286 <li><a href="../basic_init/state_save.html">State saving</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
287 <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
288 <li>Scrolling: <br>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
289 <a href="../basic_init/scroll_x.html">Horizontal</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
290 <a href="../basic_init/scroll_y.html">Vertical</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
291 <a href="../basic_init/scroll_xy.html">Both</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
292 <a href="../basic_init/scroll_y_theme.html">Themed</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
293 <a href="../basic_init/scroll_y_infinite.html">Infinite</a>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
294 </li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
295 <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
296 <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
297 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
298
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
299 <h2>Advanced initialisation</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
300 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
301 <li>Events: <br>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
302 <a href="../advanced_init/events_live.html">Live events</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
303 <a href="../advanced_init/events_pre_init.html">Pre-init</a> /
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
304 <a href="../advanced_init/events_post_init.html">Post-init</a>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
305 </li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
306 <li><a href="../advanced_init/column_render.html">Column rendering</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
307 <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
308 <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
309 <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
310 <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
311 <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
312 <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
313 <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
314 <li><a href="../advanced_init/row_callback.html">Row callback</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
315 <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
316 <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
317 <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
318 <li><a href="../advanced_init/defaults.html">Setting defaults</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
319 <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
320 <li><a href="../advanced_init/dt_events.html">Custom events</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
321 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
322
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
323 <h2>API</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
324 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
325 <li><a href="../api/add_row.html">Dynamically add a new row</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
326 <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
327 <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
328 <li><a href="../api/highlight.html">Highlight rows and columns</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
329 <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
330 <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
331 <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
332 <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
333 <li><a href="../api/form.html">Submit form with elements in table</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
334 <li><a href="../api/counter_column.html">Index column (static number column)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
335 <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
336 <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
337 <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
338 <li><a href="../api/regex.html">Regular expression filtering</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
339 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
340 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
341
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
342 <div class="demo_links">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
343 <h2>Data sources</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
344 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
345 <li><a href="../data_sources/dom.html">DOM</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
346 <li><a href="../data_sources/js_array.html">Javascript array</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
347 <li><a href="../data_sources/ajax.html">Ajax source</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
348 <li><a href="../data_sources/server_side.html">Server side processing</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
349 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
350
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
351 <h2>Server-side processing</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
352 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
353 <li><a href="../server_side/server_side.html">Obtain server-side data</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
354 <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
355 <li><a href="../server_side/post.html">Use HTTP POST</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
356 <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
357 <li><a href="../server_side/object_data.html">Reading table data from objects</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
358 <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
359 <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
360 <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
361 <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
362 <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
363 <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
364 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
365
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
366 <h2>Ajax data source</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
367 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
368 <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
369 <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
370 <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
371 <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
372 <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
373 <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
374 <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
375 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
376
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
377 <h2>Plug-ins</h2>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
378 <ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
379 <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
380 <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
381 <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
382 <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
383 <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
384 <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
385 <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
386 </ul>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
387 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
388
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
389
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
390 <div id="footer" class="clear" style="text-align:center;">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
391 <p>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
392 Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
393 Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables.
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
394 </p>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
395
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
396 <span style="font-size:10px;">
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
397 DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> &copy; 2007-2011<br>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
398 DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>.
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
399 </span>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
400 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
401 </div>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
402 </body>
ac5f9272033b first upload
saskia-hiltemann
parents:
diff changeset
403 </html>