2010-01-30 74 views
1

使用Drupal 6,視圖2與暴露的過濾器,我試圖確定最佳方式將選擇列表轉換爲鏈接列表,每個鏈接列表與匹配節點的計數。例如,而不是我在默認情況下得到的,作爲一個選擇列表:視圖暴露過濾器列表的鏈接,而不是選擇

<select name="state" class="form-select" id="edit-state" > 
<option value="All" selected="selected">&lt;Any&gt;</option> 
<option value="AL">Alabama</option> 
<option value="AK">Alaska</option> 
... 
</select> 

我想獲得像

<p>Restrict results by state:<br /> 
<a href="...">Alabama (15)</a><br /> 
<a href="...">Alaska (7)</a><br /> 
... 
</p> 

隨着顯示括號中的計數和向下鑽取的每一個環節在第一個代碼塊中選擇其中一個選項的方式也一樣。

你能提供關於如何解決這個問題的指針嗎?謝謝。

回答

1

Solr是光滑的,但也檢查視圖中的摘要選項。您可以在視圖附帶的「存檔列表」視圖的參數部分中看到此示例。

drupal.org上還有一些其他分面瀏覽模塊,但我沒有與他們有任何親身經歷。

+0

謝謝 - 好的提示,我會沿着這個方向。 – 2010-01-31 13:12:32

0

你所追求的並不是意圖要做的事情。這可能會做到,但實施起來會很慢並且很難。

相反,您應該看看Acquia爲Apache Solr製作的模塊。它會進行多面搜索,這是你真正想要做的。如果你的情況很簡單,你可能不需要那麼花哨的東西。但在你做之前,這只是一個時間問題。性能將成爲一個大問題,因爲你需要爲每個狀態進行查詢以獲得計數。

+0

感謝您指出我在面搜索的方向.. 。我要去追求分面搜索和分面搜索視圖模塊。我正在研究的小型網站,所以我認爲我們會延遲Solr。 – 2010-01-31 12:24:24

0

檢查這個版本http://drupal.org/node/891974。 代碼是每頁文章的數量,但也可以很容易地完成其他過濾器。

+0

Salut! Poate adaugi niste contact info [la profil](http://stackoverflow.com/users/543763/bogdan-d)?謝謝。 – 2014-12-04 07:59:57

0
<code> 
Please go through the following steps to display the select list as year links 
//hook_theme 
function mymodule_theme($existing, $type, $theme, $path){ 
    return array(
     'list_items' => array(
      'template' => 'list_items', //tpl to display them as list 
      'path' => $path . '/templates', 
      'type' => 'module', 
      'variables' => array(
       'list' => NULL, 
       'current' => NULL 
      ), 
     ), 
    ); 
} 
/* 
hook_form_alter 
*/ 
function mymodule_form_alter(&$form, &$form_state, $form_id) { 
    if($form_id == 'views_exposed_form') { 
    $current = ''; 
    $ranges = explode(':',$form['date_filter']['value']['#date_year_range']); 
    foreach($ranges as $key => $range) { 
     $ranges[$key] = date('Y', strtotime($range.' years', strtotime(date('Y-m-d H:i:s')))); 
    }  
    $startYear = $ranges[0]; 
    $endYear = $ranges[1];  
    if($ranges[0] > $ranges[1]) { 
     $endYear = $ranges[0]; 
     $startYear = $ranges[1]; 
    }  
    $items = array(); 
    $endYear = (int)$endYear; 
    $startYear = (int)$startYear; 
    if(empty($_REQUEST['date_filter']['value']['year'])) { 
    $items[] = 'All years'; 
    } else { 
     $items[] = l('All years', current_path(),array('query' => array("date_filter[value][year]" => ''))); 
    } 
for($i=$endYear; $i>=$startYear; $i--) { 
     if($_REQUEST['date_filter']['value']['year'] == $i) { 
     $items[$i] = $i; 
     } else { 
     $items[$i] = l($i, current_path(), array('query' => array("date_filter[value][year]" => $i))); 
}   
} 
$list = theme('list_items', array('list' => $items, 'current' => $_REQUEST['date_filter']['value']['year'])); 
     $form['html'] = array(
     '#type' => 'markup', 
     '#markup' => $list, 
    ); 
    } 
} 
/* 
templates/list_items.tpl.php 
*/ 
<ol><?php foreach($list as $key => $value) { if($current == $key || empty($current)) { ?><li class="active"><?php print $value; ?></li> 
<?php } else { ?> <li><?php print $value; ?></li> 
<?php } } ?></ol> 
//mymodule.info 
name = Filters customization 
description = Filters customization 
version = VERSION 
core = 7.x 
dependencies[] = date 
</code> 
+1

雖然這可能回答OP的問題,但如果您解釋如何以及爲何解決問題並且不會引入其他問題,則此答案將更有用。 – Mifeet 2015-12-29 17:42:20

+0

另外,這是如何回答這個問題的? – Mifeet 2015-12-29 17:44:46

相關問題