2010-01-30 38 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

相关问题