committing broken server-side sorting/pagination code for more debug tomorrow

This commit is contained in:
Colin Kuskie 2008-03-25 03:51:05 +00:00
parent f2032f39c6
commit 1d7ee90a34

View file

@ -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',