Таблица с сортировкой и пагинатором
Код с комментариями ниже.
/**
* Реализация hook_menu()
*/
function mymodule_menu()
{
$items['table-test'] = array(
'title' => 'Table',
'page callback' => 'mymodule_show_table',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Menu callback для url "table-test"
*/
function mymodule_show_table()
{
$perpage = 10; // строк на страницу
$rows = array();
// описание колонок
$header = array(
array('data' => 'ID', 'field' => 'nid'),
array('data' => 'Тип', 'field' => 'type'),
array('data' => 'Заголовок', 'field' => 'title'),
);
$result = pager_query("SELECT nid, type, title FROM {node} WHERE status = 1" . tablesort_sql($header), $perpage);
while ($row = db_fetch_array($result))
{
$rows[] = $row;
}
$output = theme('table', $header, $rows); // Получаем html код таблицы
$output .= theme('pager', NULL, $perpage, 0); // Получаем html код пагинатора
return $output;
}
Если запрос, передаваемый в pager_query, содержит группировку GROUP BY, вычисляемое поле COUNT или просто сложен, то четвёртым параметром нужно передать ещё один запрос для получения количества записей. Пример:
$result = pager_query(
"SELECT nid, type, title FROM {node} WHERE status = 1" . tablesort_sql($header),
$perpage,
0,
"SELECT COUNT(*) FROM {node} WHERE status = 1"
);
Написанное актуально для
Drupal 6.x