committing broken server-side sorting/pagination code for more debug tomorrow
This commit is contained in:
parent
f2032f39c6
commit
1d7ee90a34
1 changed files with 88 additions and 14 deletions
|
|
@ -422,14 +422,20 @@ sub www_getTaxesAsJson {
|
||||||
my ($db, $form) = $session->quick(qw(db form));
|
my ($db, $form) = $session->quick(qw(db form));
|
||||||
my $startIndex = $form->get('startIndex') || 0;
|
my $startIndex = $form->get('startIndex') || 0;
|
||||||
my $numberOfResults = $form->get('results') || 25;
|
my $numberOfResults = $form->get('results') || 25;
|
||||||
|
my $sortKey = $form->get('sortKey') || 'country';
|
||||||
|
my $sortDir = $form->get('sortDir') || 'desc';
|
||||||
my @placeholders = ();
|
my @placeholders = ();
|
||||||
my $sql = 'select SQL_CALC_FOUND_ROWS * from tax';
|
my $sql = 'select SQL_CALC_FOUND_ROWS * from tax';
|
||||||
my $keywords = $form->get("keywords");
|
my $keywords = $form->get("keywords");
|
||||||
if ($keywords ne "") {
|
if ($keywords ne "") {
|
||||||
($sql, @placeholders) = $db->buildSearchQuery($sql, $keywords, [qw{country state city code}])
|
($sql, @placeholders) = $db->buildSearchQuery($sql, $keywords, [qw{country state city code}])
|
||||||
}
|
}
|
||||||
push(@placeholders, $startIndex, $numberOfResults);
|
push(@placeholders, $sortKey, $sortDir, $startIndex, $numberOfResults);
|
||||||
$sql .= ' order by country desc limit ?,?';
|
$sql .= ' order by ? ? limit ?,?';
|
||||||
|
$session->errorHandler->warn("numberOfResults : $numberOfResults");
|
||||||
|
$session->errorHandler->warn("startIndex: $startIndex");
|
||||||
|
$session->errorHandler->warn("sortKey : $sortKey");
|
||||||
|
$session->errorHandler->warn("sortDir : $sortDir");
|
||||||
my %results = ();
|
my %results = ();
|
||||||
my @records = ();
|
my @records = ();
|
||||||
my $sth = $db->read($sql, \@placeholders);
|
my $sth = $db->read($sql, \@placeholders);
|
||||||
|
|
@ -569,25 +575,57 @@ EODSURL
|
||||||
//Tell YUI how to get back to the site
|
//Tell YUI how to get back to the site
|
||||||
var buildQueryString = function (state,dt) {
|
var buildQueryString = function (state,dt) {
|
||||||
return ";startIndex=" + state.pagination.recordOffset +
|
return ";startIndex=" + state.pagination.recordOffset +
|
||||||
";keywords=" + Dom.get('keywordsField').value +
|
";keywords=" + Dom.get('keywordsField').value +
|
||||||
";results=" + state.pagination.rowsPerPage;
|
";sortKey=" + state.sorting.key +
|
||||||
|
";sortDir=" + ((state.sorting.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc") +
|
||||||
|
";results=" + state.pagination.rowsPerPage;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Build and configure a paginator
|
//Build and configure a paginator
|
||||||
var myPaginator = new Paginator({
|
// var myPaginator = new Paginator({
|
||||||
containers : ['paging'],
|
// containers : ['paging'],
|
||||||
pageLinks : 5,
|
// pageLinks : 5,
|
||||||
rowsPerPage : 25,
|
// rowsPerPage : 25,
|
||||||
rowsPerPageOptions : [10,25,50,100],
|
// rowsPerPageOptions : [10,25,50,100],
|
||||||
template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
|
// template : "<strong>{CurrentPageReport}</strong> {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}"
|
||||||
});
|
// });
|
||||||
|
|
||||||
|
// Custom function to handle pagination requests
|
||||||
|
var handlePagination = function (state,dt) {
|
||||||
|
var sortedBy = dt.get('sortedBy');
|
||||||
|
|
||||||
|
// Define the new state
|
||||||
|
var newState = {
|
||||||
|
startIndex: state.recordOffset,
|
||||||
|
sorting: {
|
||||||
|
key: sortedBy.key,
|
||||||
|
dir: ((sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc")
|
||||||
|
},
|
||||||
|
pagination : { // Pagination values
|
||||||
|
recordOffset: state.recordOffset, // Default to first page when sorting
|
||||||
|
rowsPerPage: dt.get("paginator").getRowsPerPage() // Keep current setting
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create callback object for the request
|
||||||
|
var oCallback = {
|
||||||
|
success: dt.onDataReturnSetRows,
|
||||||
|
failure: dt.onDataReturnSetRows,
|
||||||
|
scope: dt,
|
||||||
|
argument: newState // Pass in new state as data payload for callback function to use
|
||||||
|
};
|
||||||
|
|
||||||
|
// Send the request
|
||||||
|
dt.getDataSource().sendRequest(buildQueryString(newState), oCallback);
|
||||||
|
};
|
||||||
|
|
||||||
//Configure the table to use the paginator.
|
//Configure the table to use the paginator.
|
||||||
var myTableConfig = {
|
var myTableConfig = {
|
||||||
initialRequest : ';startIndex=0',
|
initialRequest : ';startIndex=0;results=25',
|
||||||
generateRequest : buildQueryString,
|
generateRequest : buildQueryString,
|
||||||
paginationEventHandler : DataTable.handleDataSourcePagination,
|
paginationEventHandler : handlePagination,
|
||||||
paginator : myPaginator
|
//paginator : myPaginator
|
||||||
|
paginator : new YAHOO.widget.Paginator({rowsPerPage:25})
|
||||||
};
|
};
|
||||||
STOP
|
STOP
|
||||||
|
|
||||||
|
|
@ -611,6 +649,42 @@ EOCHJS
|
||||||
//Now, finally, the table
|
//Now, finally, the table
|
||||||
var myTable = new DataTable('dt', taxColumnDefs, mySource, myTableConfig);
|
var myTable = new DataTable('dt', taxColumnDefs, mySource, myTableConfig);
|
||||||
|
|
||||||
|
// Override function for custom server-side sorting
|
||||||
|
myTable.sortColumn = function(oColumn) {
|
||||||
|
// Default ascending
|
||||||
|
var sDir = "asc";
|
||||||
|
|
||||||
|
// If already sorted, sort in opposite direction
|
||||||
|
if(oColumn.key === this.get("sortedBy").key) {
|
||||||
|
sDir = (this.get("sortedBy").dir === YAHOO.widget.DataTable.CLASS_ASC) ?
|
||||||
|
"desc" : "asc";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define the new state
|
||||||
|
var newState = {
|
||||||
|
startIndex: 0,
|
||||||
|
sorting: { // Sort values
|
||||||
|
key: oColumn.key,
|
||||||
|
dir: (sDir === "desc") ? YAHOO.widget.DataTable.CLASS_DESC : YAHOO.widget.DataTable.CLASS_ASC
|
||||||
|
},
|
||||||
|
pagination : { // Pagination values
|
||||||
|
recordOffset: 0, // Default to first page when sorting
|
||||||
|
rowsPerPage: this.get("paginator").getRowsPerPage() // Keep current setting
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create callback object for the request
|
||||||
|
var oCallback = {
|
||||||
|
success: this.onDataReturnSetRows,
|
||||||
|
failure: this.onDataReturnSetRows,
|
||||||
|
scope: this,
|
||||||
|
argument: newState // Pass in new state as data payload for callback function to use
|
||||||
|
};
|
||||||
|
|
||||||
|
// Send the request
|
||||||
|
this.getDataSource().sendRequest(buildQueryString(newState), oCallback);
|
||||||
|
};
|
||||||
|
|
||||||
//Setup the form to submit an AJAX request back to the site.
|
//Setup the form to submit an AJAX request back to the site.
|
||||||
Dom.get('keywordSearchForm').onsubmit = function () {
|
Dom.get('keywordSearchForm').onsubmit = function () {
|
||||||
mySource.sendRequest(';keywords=' + Dom.get('keywordsField').value + ';startIndex=0',
|
mySource.sendRequest(';keywords=' + Dom.get('keywordsField').value + ';startIndex=0',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue