Berkat Berdir, saya membuatnya bekerja. Beginilah cara kerjanya lebih detail.
Tablesort dipicu "secara otomatis" jika array (kolom) dalam array $ header berisi kunci 'data', 'field' dan opsional 'sort'. Ini akan membuat tautan dengan 'sort' dan 'order' di header kolom dan perlihatkan panah kecil dan semacamnya.
Untuk melakukan penyortiran Anda sendiri, dapatkan pengaturan penyortiran saat ini dengan tablesort_get_order dan tablesort_get_sort dan gunakan nilai-nilai itu untuk fungsi penyortiran Anda sendiri. Kunci 'sql' dalam array yang dikembalikan oleh tablesort_get_order berisi nama bidang yang akan digunakan untuk menyortir.
Sepotong kode contoh (yang belum diuji) dengan array $ users berisi beberapa detail untuk setiap pengguna:
// setup the table data that we want to show
$tableData = array();
foreach ($users as $userDetails) {
$tableData[] = array(
'name' => $userDetails['name'],
'visits' => $userDetails['visits'],
'views' => $userDetails['views'],
'comments' => $userDetails['comments']
);
}
// headers array, sorting by default on comments
$headers = array(
array('data' => t('Name'), 'field' => 'name'),
array('data' => t('Visits'), 'field' => 'visits'),
array('data' => t('Views'), 'field' => 'views'),
array('data' => t('Comments'), 'field' => 'comments', 'sort' => 'desc')
);
// getting the current sort and order parameters from the url
$order = tablesort_get_order($headers);
$sort = tablesort_get_sort($headers);
// sort the table data accordingly (write your own sort function)
$tableData = my_array_sort($tableData, $order['sql'], $sort);
// create the array with rows for theme table
$rows = array();
foreach ($tableData as $entry) {
$rows[] = array(
array('data' => $entry['name']),
array('data' => $entry['visits']),
array('data' => $entry['views']),
array('data' => $entry['comments']),
);
}
// add any attributes and sent everything to theme table
$attributes = array('class' => array('my_class'));
$table = array('header' => $headers, 'attributes' => $attributes, 'rows' => $rows);
$html = theme('table', $table);