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.

2 calls to tripal_pager_callback()
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);
}