Как вы создаете сортируемые таблицы с помощью пейджера с данными из пользовательской таблицы?
Для Drupal 6 вы могли бы сделать что-то вроде этого:
$header = array(
array('data' => t('Order id'), 'field' => 'order_id'),
...
array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);
$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25;
$result = pager_query($sql, $limit);
...
Я взглянул и на drupal 7, и оба pager_query
и tablesort_sql
теперь исчезли. Похоже, что вместо этого класс PagerDefault
можно использовать для создания запроса на пейджер с использованием DBTNG. Я не смог найти никаких подсказок в простом API для присоединения сортируемой таблицы к запросу, как это делается в Drupal 6.
Итак, как создать сортируемую таблицу с помощью пейджера, извлекающего данные из пользовательской таблицы?
4 answers
Вы используете так называемые расширители. В вашем случае код будет похож на следующий.
$header = array(
array('data' => t('Order id'), 'field' => 'order_id'),
// ...
array('data' => t('Transaction time'), 'field' => 'payment_time', 'sort' => 'desc'),
);
// Initialize $query with db_select().
$query = db_select('your table name');
// Add the fields you need to query.
// ...
// Add the table sort extender.
$query = $query->extend('TableSort')->orderByHeader($header);
// Add the pager.
$query = $query->extend('PagerDefault')->limit(25);
$result = $query->execute();
Смотрите Как преобразовать модуль в DBTNG, Динамические запросы: Сортировка таблиц и Расширители.
Используйте расширители TableSort
и PagerDefault
.
$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title', 'status'));
$table_sort = $query->extend('TableSort') // Add table sort extender.
->orderByHeader($header); // Add order by headers.
$pager = $table_sort->extend('PagerDefault')
->limit(5); // 5 rows per page.
$result = $pager->execute();
Используйте модуль Таблицы данных .
Модуль DataTables интегрирует таблицы данных плагина jQuery в Drupal в качестве стиля представлений и вызываемой функции темы. Таблицы данных позволяют добавлять динамические функции в таблицы, в том числе:
- Разбиение на страницы переменной длины
- Фильтрация на лету
- Сортировка с определением типа данных
- Интеллектуальная обработка ширины столбцов
- Тематизируемый CSS
- И многое другое впереди...
Вы можете просто включить тот же Drupal 6 tablesort_sql в свой код, и он отлично работает.
Для пейджера:
$count = <Total No. of Table rows>
$sql = "...";
$sql .= tablesort_sql($header);
$limit = 25; //Pager limit
$results = db_query( $sql );
$rows = array();
//Loop through the result.
while ( $row = $results->fetchAssoc() ) {
$rows = <Get your array values for Table row>
}
$current_page = pager_default_initialize($count, $limit);
$chunks = array_chunk($rows,$limit, TRUE);
$output = theme( 'table', array( 'header' => $headers, 'rows' => $chunks[$current_page] ) );
$output .= theme( 'pager', array('quantity',$count ) );
print $output;