Код с комментариями ниже.
/**
* Реализация 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"
);
По материалам Creating a table with sortable columns and pagination from custom SQL.
Написанное актуально для
Drupal 6.x
Похожие записи
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Views сортировка по выражению/условию/формуле
- Views фильтр "товар имеет опубликованную вариацию"
- Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Добавить сторонней контент сущности своё базовое поле (base field)
Комментарии
А как быть, если надо добавить ещё одну колонку, с нужным текстом, значение которого берётся из другого SQL запроса?
добавляйте в
$results
перед выводом таблицыА как можно значения одной из колонок отобразить в виде ссылок... засунуть в функцию l() ?
да
хороший ответ :)
хотелось бы код
куда добавить
l()
?в цикл
как то так
я правильно понимаю?
нет, $row это массив
Разрулил вот так:
корявенько, но работает :)
Спасибо за подсказки!
Подскажите, как изменить параметр $_GET['order'] на компактный вид? Т.е. если у нас, например,
то после сортировки по этому столбцу получается не оч красивый урл если есть длинное описание да еще и с пробелами.
Например в мозиле -
&sort=asc&order=Максимальный вес (кг) ,
а в хроме -
Все, решил.
При создании заголовка таблицы
1 Переопределяем theme_table в template.php
2 Копируем функцию tablesort_header в template.php, переименовав, например, в my_tablesort_header
3 В имя_темы_table меняем
на
4 В my_tablesort_header изменяем строку
на
Где $title_new
А как прицепить к примеру фильтрацию к таблице, и колонку с возможностью выделения рядов данных?
http://xandeadx.ru/blog/drupal/138
http://xandeadx.ru/blog/drupal/147
Добавить комментарий