我的自定义模块中有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();
它不起作用。
我该如何解决?
答案 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");