ขอบคุณBerdirฉันทำให้มันใช้งานได้ นี่คือวิธีการทำงานในรายละเอียดเพิ่มเติม
Tablesort จะถูกเรียกใช้ "อัตโนมัติ" หากอาร์เรย์ (คอลัมน์) ในอาร์เรย์ $ headers มีปุ่ม 'data', 'field' และ 'sort' ซึ่งเป็นทางเลือก วิธีนี้จะสร้างลิงก์ที่มี 'เรียงลำดับ' และ 'เรียงลำดับ' ในส่วนหัวของคอลัมน์และแสดงลูกศรเล็ก ๆ
หากต้องการเรียงลำดับของคุณเองให้รับการตั้งค่าการเรียงลำดับปัจจุบันด้วยtablesort_get_orderและtablesort_get_sortและใช้ค่าเหล่านั้นสำหรับฟังก์ชันการเรียงลำดับของคุณเอง คีย์ 'sql' ในอาร์เรย์ที่ส่งคืนโดย tablesort_get_order มีชื่อเขตข้อมูลที่จะใช้สำหรับการเรียงลำดับ
ชิ้นส่วนของโค้ดตัวอย่าง (ยังไม่ทดลอง) ที่มีผู้ใช้ array $ ที่มีรายละเอียดบางอย่างสำหรับผู้ใช้แต่ละคน:
// 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);