123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- /**
- * 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.
- *
- * @param $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.
- * @param limit
- * The number of records to include in the paged results
- * @param 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.
- * @param 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.
- */
- 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);
- }
|