Drupal → Вывод html таблицы с данными из бд, сортировкой и пагинацией
Код с комментариями ниже.
/** * Реализация 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.
Комментарии
А как быть, если надо добавить ещё одну колонку, с нужным текстом, значение которого берётся из другого 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
Оставить комментарий