Bagaimana Anda membuat tabel sortir dengan pager dengan data dari tabel khusus?

19

Untuk Drupal 6 Anda dapat melakukan sesuatu seperti ini:

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

Saya melihat dan untuk drupal 7 dan keduanya pager_querydan tablesort_sqlsekarang hilang. Tampaknya PagerDefaultkelas dapat digunakan untuk membuat permintaan pager menggunakan DBTNG. Saya tidak dapat menemukan petunjuk apa pun pada API sederhana untuk melampirkan tabel yang dapat diurutkan ke kueri seperti yang dilakukan di Drupal 6.

Jadi, bagaimana Anda membuat tabel yang bisa diurutkan dengan pager yang menarik data dari tabel khusus?

googletorp
sumber

Jawaban:

8

Anda menggunakan ekstender yang disebut. Dalam kasus Anda, kode akan serupa dengan yang berikut.

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

Lihat HowTo: Konversi modul ke DBTNG , Kueri dinamis: Penyortiran tabel dan Extender .

kiamlaluno
sumber
Jangan lupa untuk menambahkan pager aktual dalam output Anda: // Bangun tabel. $ output = tema ('table', array ('header' => $ header, 'rows' => $ rows, 'empty' => t ('Tidak ada string yang tersedia.'))); // Tambahkan pager. $ output. = theme ('pager');
kbrinner
6

Gunakan TableSortdan PagerDefaultekstender.

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

Gunakan modul DataTables .

Modul DataTables mengintegrasikan plugin jQuery DataTables ke dalam Drupal sebagai gaya tampilan dan fungsi tema yang bisa dipanggil. DataTables memungkinkan Anda menambahkan fitur dinamis ke tabel, termasuk:

  • Panjang pagination variabel
  • Penyaringan on-the-fly
  • Menyortir dengan deteksi tipe data
  • Penanganan lebar kolom secara cerdas
  • Dapat dipilih berdasarkan CSS
  • Dan banyak lagi yang akan datang ...
Satya
sumber
Saya menyarankan untuk tidak menambahkan modul untuk melakukan sesuatu yang merupakan bagian dari DB API dan dapat dilakukan dengan sekitar 50 atau lebih sedikit baris kode kustom.
Agi Hammerthief
0

Anda bisa memasukkan Drupal 6 tablesort_sql yang sama ke dalam kode Anda dan itu berfungsi dengan baik.

Untuk pager:

$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;
Paulraj
sumber