2012-04-29 46 views
1

我有一個視圖,我用它作爲「高級搜索」工具 - 它只是提供了一些相關節點的列表,這些節點受到我所使用的大量暴露過濾器的限制。特別是,我有一個「關鍵字」暴露過濾器,它充當主要搜索框,它在節點標題上過濾。現在,我已經要求能夠切換(我假設帶有複選框或類似的)此過濾器,以同時搜索節點標題正文,作爲向用戶提供更多搜索結果的選項。Drupal 6查看:通過複選框打開/關閉過濾器?

我目前有一個視圖設置了兩個顯示器:一個僅對節點標題進行過濾,另一個使用Views Or將結果限制爲包含節點標題或節點主體中的關鍵字的節點。通過他們自己,這兩個顯示器都按照我喜歡的方式工作。

我的問題是如何使用複選框或類似的東西在這兩個顯示之間切換。我不想使用Views Display Tabs,因爲兩個顯示器在外觀上看起來完全相同(唯一的區別是如何配置過濾器以包含更多/更少的結果),這會讓用戶感到困惑 - 另外它會使用AJAX來打破一些(大部分很小)我通過jQuery對視圖的行爲進行了修改。

我想要完成的事情本質上是提交視圖時的條件檢查 - 取決於是否選中複選框,參數會發送到一個顯示器或另一個顯示器。有關如何完成此任務的任何建議?

回答

1

您可能會想到的一種方法可能涉及在公開的過濾器表單上添加自定義驗證處理程序,理論上允許您檢查該值並將請求轉發到適當的不同頁面顯示。暴露的過濾器作爲$ _GET變量顯示在URL中,因此,將用戶轉發到具有預定義過濾器的特定頁面應該很容易。

<?php 

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
    case 'views_exposed_form': 
     // Deterimine the ID so you only do this 
     // to a specific exposed filter form 
     // drupal_set_message($form['#id']); 
     if ($form['#id'] == 'views-exposed-form-api-search-page-1') { 
     // You might also want to add the checkbox FAPI item in this area 
     $form['#validate'][] = 'mymodule_api_search_validate'; // custom validate handler function name 
     } 
    break; 
    } 
} 

function mymodule_api_search_validate($form, &$form_state) { 
    // Check if the FAPI item has the specified checkbox value 
    if ($form_state['values']['options'] == 'title') { 
    // The get variables to pass to the views exposed filters 
    // You can configure what this $_GET variable should be while editing the filter 
    $query = array(
     'query' => 'the search query', 
    ); 
    drupal_goto('api/search', $query); 
    } 
} 

?> 
+0

不是一個好主意,它會是好的,以露出過濾器作爲一個塊,則控制的可見性,使其顯示在兩個不同視圖的結果,並且可以遞歸地被使用。 –