Facebook Connect

Connect with Facebook

Nube de Tags

Inicio de sesión

pager in drupal

Drupal has very powerful paging capabilities. This document explains it usage and capabilities using examples. Lets start by creating a module called paggar. If you are wondering why I used such strange sounding name for the modules, her goes a simple explanation. pager module already exists and pagger is not a very polite word.

paggar.info

name = paggar
description = paging example
package = mole
core = 6.x
version = 6.3
project = mole

paggar.module

// paggar.module - molecularsciences.org

// help
function paggar_help($section)
{
switch ($section) {
case 'admin/modules#description':
return t('Paging Example');
}
}

// permissions
function paggar_perm()
{
return array('enable paggar');
}

function paggar_menu()
{
$items['paggar'] = array(
'title' => 'Paging example',
'page callback' => 'paggar_example',
'access callback' => 'user_access',
'access arguments' => array('enable paggar'),
'type' => MENU_CALLBACK
);
return $items;
}

// paging example
function paggar_example()
{
// title for the page
drupal_set_title("Paging example");

// query
$q = "select distinct title from {node} where type like 'page'";

$rs = db_query($q);
$o = '<ul>';
while($rw = db_fetch_object($rs))
{
$o .= '<li>' . $rw->title . '</li>';
}
$o .= '</ul>';

return $o;
}

This module would print the titles of all page nodes. No paging yet. To add paging, we need to provide the following:

  • define how many nodes to print per page
  • specify a count query e.g. select count(*) from ...
  • use pager_query() instead of db_query()
  • use pager_theme() to print paging links

// paging example
function paggar_example()
{
// title for the page
drupal_set_title("Paging example");

// how many nodes per page
$nodes_per_page = 20;

// query
$q = "select distinct title from {node} where type like 'page'";

// count query
$cq = "select count(distinct title) from {node} where type like 'page'";

$rs = pager_query($q,$nodes_per_page,0,$cq);

$o = '<ul>';
while($rw = db_fetch_object($rs))
{
$o .= '<li>' . $rw->title . '</li>';
}
$o .= '</ul>';

// print paging links
$o .= theme('pager', NULL, 10);

return $o;
}

You must pass the query, an integer specifying the number of entries to display per page, paging identifier, and the count query to the pager_query