將搜尋結果排序

最近做的一件案子中,
有一個比較少見但有時候很實用的功能需求
就是要將搜尋的結果以某條件排序
例如搜尋一些新聞, 時間性很重要
想要將最近相關的新聞排先, 以日期順序
但內建的搜尋是以相關性排序, 最相關的排先

思路:
首先是排序
排序首選是views
但views 的 filter 過濾器並沒有搜尋相關字的設定
但使用views table 排序是最方便的
views 自己就內建

所以我要將搜尋的結果傳給views
自然是使用 arguments 了
找出搜尋結果的nid, 再用逗號分隔, 傳給views
再將views 內嵌到serach result 的頁面

實際解決辦法, 設定:
先新增一個views,
顯示設定為table, 可排序
再到fields 選擇所需的欄位
重點在argument 的欄位,
選Node:nid
Provide default argument
PHP code:

<?php
$results
=node_search('search',arg(2));
 
$size = count($results);

  for(
$i=0;$i<$size;$i++){
    if (
$i+1==$size){
     
$output .= $results[$i]['node']->nid;
    }else{
     
$output .= $results[$i]['node']->nid.",";
    }
  }
return
$output;
?>

Argument type: Node id separated by , or +
選中 Allow multiple terms per argument.

結語:
需然這個方法不是很完美(實際上這是做了兩次一樣的搜尋)
但既然主機的能力不是問題, 開發時間也不多
完成任務還是最重要的

Google