Як зробити сортувальні таблиці з пейджером із даними із користувацької таблиці?


19

Для 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.

Тож як створити сортувальну таблицю з пейджером, який витягує дані зі спеціальної таблиці?

Відповіді:


8

Ви використовуєте так звані розширювачі. У вашому випадку код буде подібний до наступного.

$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();

Див. HowTo: Перетворення модуля в DBTNG , Динамічні запити: Сортування таблиці та розширення .


Не забудьте додати фактичний пейджер у свій результат: // Створити таблицю. $ output = topic ('table', array ('header' => $ header, 'рядки' => $ рядки, 'empty' => t ('Немає рядків.'))); // Додайте пейджер. $ output. = тема ('пейджер');
кбріннер

6

Використовуйте розширювачі 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();

2

Використовуйте модуль DataTables .

Модуль DataTables інтегрує плагін jQuery DataTables у Drupal як стиль перегляду та функцію теми, що викликається. DataTables дозволяє додавати динамічні функції до таблиць, включаючи:

  • Пагинація змінної довжини
  • Фільтр на ходу
  • Сортування з виявленням даних даних
  • Розумна робота з шириною стовпців
  • Тематичний за допомогою CSS
  • І ще ...

Я б радив не додавати модуль, щоб робити щось, що є частиною API DB, і це можна зробити приблизно з 50 або меншими рядками користувацького коду.
Agi Hammerthief

0

Ви можете просто включити той самий Drupal 6 tableort_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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.