Dank Berdir habe ich es geschafft. So funktioniert es im Detail.
Tablesort wird "automatisch" ausgelöst, wenn die (Spalten-) Arrays im $ headers-Array die Schlüssel 'data', 'field' und optional 'sort' enthalten. Dies wird Links mit 'sort' und 'order' in den Spaltenüberschriften erstellen und den kleinen Pfeil und so weiter anzeigen.
Um Ihre eigene Sortierung durchzuführen, rufen Sie die aktuellen Sortiereinstellungen mit tablesort_get_order und tablesort_get_sort ab und verwenden Sie diese Werte für Ihre eigene Sortierfunktion. Der Schlüssel 'sql' in dem von tablesort_get_order zurückgegebenen Array enthält den Feldnamen, der zum Sortieren verwendet werden soll.
Ein Stück (ungetesteter) Beispielcode mit dem Array $ users, der einige Details für jeden Benutzer enthält:
// 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);