2014-01-17 42 views
0

内容我在我的自定义模块3变量:通过DESC排序在Drupal 7模块

$day = date('d',strtotime($nd->field_edate['und'][0]['value'],time())); 

    $dayname = date('w',strtotime($nd->field_edate['und'][0]['value'],time())); 

    $hours = date('H:i',strtotime($nd->field_edate['und'][0]['value'],time())); 

而且我的内容顺序。

$rs = $data->orderBy("n.created","desc")->execute(); 

但我想,它由$day$dayname$hours使用顺序。

当我试图像这样:

$rs = $data->orderBy("n.created","'$hours.'")->execute(); 

我的伪代码我想:

$rs = $data->orderBy("order by near date today")->execute(); 

它不工作。

我该如何解决?

回答

0

您只能按数据库字段排序,而不是任意PHP变量。

如果您想先按edate字段排序,则需要加入该表。

对于这个例子,我假设edate是一个附加到文章类型节点的字段。

$data->join('field_data_field_edate', 'e', "e.entity_id = n.nid AND e.bundle = 'article'"); 

现在你可以使用:

$data->orderBy("e.field_edate_value", "ASC"); 

这将任何值是在EDATE场顺序。如果这是一个时间戳,并且要由DAYNAME命令,那么你可以使用:

$data->addExpression("DAYNAME(FROM_UNIXTIME(e.field_edate_value))", 'day_name'); 

然后你就可以通过你的表达顺序:

$data->orderBy("day_name", "ASC");