Drupal 模組開發 - 嵌入views(with exposed filter)

要在頁面或區塊中嵌入一個views的view,有兩個作法。

簡單的應用,可以直接利用 views_embed_view() 來達成,語法範例如下:
 

//views_embed_view('views_machine_name','display_id'[, $contextual_args]);
print views_embed_view('blog_posts','block_1', $node->nid);

但如果需要嵌入包含exposed_filter的views,又不希望頁面中出現exposed filter的表單時,可能就必須用views_get_vew(),方法如下:

//設定篩選器的參數內容
$filters=array('field_a'=>'value1','field_b'=>'value2');
//取得views物件
$view = views_get_view('views_machine_name');

//指定exposed filter的參數
$view->set_exposed_input($filters);

//取得指定的display
$view->set_display('block_matched_jobs');

//執行views查詢
$view->pre_execute();
$view->execute();

//移除exposed filter的表單
unset($view->exposed_widgets);

//輸出views 結果
echo $view->render();

特殊案例 - exposed filter的日期參數

日期參數比較特殊,在設定篩選器的時候要用以下的格式(參考這篇):

//欄位名稱為field_my_date_field
//本範例之exposed filter的設定為「年」
$filters = array('field_my_date_field_value' => array('value' => array('year' => $year)));