按Drupal 7模块中的内容排序

时间:2014-01-17 11:28:25

标签: php database drupal drupal-7

我的自定义模块中有3个变量:

  $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()));

我的内容订单由DESC提供。

$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();

它不起作用。

我该如何解决?

1 个答案:

答案 0 :(得分: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字段中的任何值进行排序。如果这是一个时间戳,并且您想按日期名称排序,那么您可以使用:

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

然后你可以用你的表达命令:

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