如果你没用过tablesort_sql,那我就要解释下了,顾名思义,它是针对table结构的内容来排序的。 实际上,是和theme_table()函数配合使用的。 在使用它的时候,我们要了解以下问题:
1. 它最终实现的结果,实际上是给SQL语句加上 ORDER BY ... ,这样来实现所谓的排序。 正因为如此,你的原sql语句不能有 ORDER BY语句。
2. 因为SQL里只能使用一次 ORDER BY,所以每次排序只能按照某一字段来排序,不会叠加上次的排序选择条件,因此在规定默认排序方式时,也只能指定某一个字段啦,注意在规定默认排序时,排序方式要小写,如 “desc” 形式见后面的代码。
3. 如果不指定默认的排序,那么内容将按默认的查询顺序排序,那样是老的节点排上的,当然不可以。实际上我要列出的字段中没有创建时间,也没有与时间相关的可 排序的字段。因此,想了一个不知是否会被成为下策的方法:我在$head取出了nid,规定了它为默认排序方式,并且给它所在的th元素 class="hidden"属性。这样我就可以隐藏它了,并且也用它达到了排序目的。
示例代码:
02 | array ( 'data' => '号码' ), |
03 | array ( 'data' => '品牌' ), |
04 | array ( 'class' => 'sort' , 'data' => '话费额' , 'field' => 'field_spend_value' ), |
05 | array ( 'class' => 'sort' , 'data' => '售价' , 'field' => 'field_price_value' ), |
06 | array ( 'data' => '新旧' ), |
07 | array ( 'data' => '操作' ), |
08 | array ( 'class' => 'hidden' , 'field' => 'nid' , 'sort' => 'desc' ), |
10 | $sql = "SELECT n.title, n.nid, num.field_brand_value, num.field_spend_value, num.field_price_value, num.field_newold_value FROM {node} n INNER JOIN {content_type_num} num ON n.nid = num.nid WHERE n.uid = %d" .tablesort_sql( $head ); |
型动视觉摘自似水流云的博客,谢谢!
|