function tripal_pager_callback
1.x tripal_core_misc.api.inc | tripal_pager_callback($func, $limit = 10, $element = 0, $cfunc) |
This function implements a pager, similar to a pager for a database query using a non query. Rather than pass a query as in pager_query function, a callback function should recieve as it's first argument an array of the argumetns passed to this function. The second argument should be the number of results to retreive, and the third argument should be the the element index (same as with pager_query) function. The callback function should always return an array. If no values are available then an empty array should be returned.
Parameters
$func: The name of the callback function used to retrieve the results. The callback function should have three arguments: first, an array of values passed into the tripal_pager_callback; second, the start index of the paged values; third, the number of records to include.
limit: The number of records to include in the paged results
element: A unique integer ID if more than one pager exists on a page. if multiple types of pagers (e.g. pager_query, chado_pager_query) are on the same page then this parameter should be unique amongst them all.
cfunc: The name of the callback function used to specify the total results. The callback f unction should receive one argument: an array of values that are passed into the tripal_pager_callbck function.
- tripal_pub_remote_search_AGL in tripal_pub/
includes/ importers/ AGL.inc - tripal_pub_remote_search_PMID in tripal_pub/
includes/ importers/ PMID.inc
File
- tripal_core/
api/ tripal_core_misc.api.inc, line 28
Code
function tripal_pager_callback($func, $limit = 10, $element = 0, $cfunc) {
global $pager_page_array, $pager_total, $pager_total_items;
$page = isset($_GET['page']) ? $_GET['page'] : '';
// Substitute in query arguments.
$args = func_get_args();
$args = array_slice($args, 4);
// Alternative syntax for '...'
if (isset($args[0]) && is_array($args[0])) {
$args = $args[0];
}
// count the number of records by calling the counting callbackup function
$count = $cfunc($args);
// Convert comma-separated $page to an array, used by other functions.
$pager_page_array = explode(',', $page);
// We calculate the total of pages as ceil(items / limit).
$pager_total_items[$element] = $count;
$pager_total[$element] = ceil($pager_total_items[$element] / $limit);
$pager_page_array[$element] = max(0, min((int) $pager_page_array[$element], ((int) $pager_total[$element]) - 1));
// retrieve the results using the specified callback.
return $func($args, $pager_page_array[$element] * $limit, $limit);
}