Monday, June 6, 2011

Create a sortable table using “theme_table()” function in Drupal

We can create a sortable header using “theme_table()” function. In sortable header user can sort a column in ascending or descending order. I am using a table called “package_coupon“.
This table have seven fields (coupon, operator, operand, created,
expire, used and user_by). We are providing the sorting facility on four
fields only (coupon, created, expire and used). Initially, the coupon
field is sorted by ascending order.
Here “tablesort_sql()” function is important. 
This function produces the ORDER BY clause to insert in your SQL queries,
assuring that the returned database table rows match the sort order chosen
by the user.
Code:-
 
function package_coupon_list() {
 $head = array(
  array('data' => t('Coupon'), 'field' => 'coupon', 'sort' => 'asc'),
  array('data' => t('Type of Discount')),
  array('data' => t('Created'), 'field' => 'created'),
  array('data' => t('Expire'), 'field' => 'expire'),
  array('data' => t('Status'), 'field' => 'used'),
  array('data' => t('Used by')),
 );
 
   $sql = "SELECT * FROM package_coupon" . tablesort_sql($head);
 
    $result = db_query($sql);
 
   while ($coupon = db_fetch_object($result)) {
  $rows[] = array(
   array('data' => _coupon_format($coupon->coupon)),
   array('data' => ($coupon->operator == '%' ? "{$coupon->operand}% discount" : 
"\${$coupon->operator}{$coupon->operand} discount")),
   array('data' => format_date($coupon->created, 'small')),
   array('data' => format_date($coupon->expire, 'small')),
   array('data' => $coupon->used . ' left'),
   array('data' => ($coupon->user_by == '') ? 'None' : $coupon->user_by),
  );
   }
 
 return theme_table($head, $rows);
}
 
::Output Seems like:: 

Sortable table using theme_table() function

Additional information click here

No comments:

Post a Comment

Followers