2014-01-17 185 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");