1

使用 Drupal 6,Views 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>

每个链接在括号中显示计数并以与选择第一个代码块中的一个选项相同的方式向下钻取。

您能否提供有关如何解决此问题的任何指示?谢谢。

4

5 回答 5

2

您可能想查看更好的暴露过滤器模块以获取视图。7.x 版本具有此功能,6.x 版本也有一个补丁,可以在以下位置找到:

http://drupal.org/node/1159232#comment-4710372

于 2011-07-28T21:28:34.910 回答
1

Solr 很漂亮,但也可以查看 Views 中的摘要选项。您可以在视图附带的“存档列表”视图的参数部分中看到一个示例。

drupal.org 上还有一些其他的多面浏览模块,但我对它们没有任何个人经验。

于 2010-01-31T09:07:01.387 回答
0

你所追求的并不是视图的本意。这可能是可能的,但它会很慢而且很难实现。

相反,您应该查看 Acquia 为 Apache Solr 制作的模块。它会进行多面搜索,这正是您真正想要做的。如果您的案例足够简单,您可能不需要这么花哨的东西。但这只是时间问题。性能将成为一个大问题,因为您需要对每个状态进行查询才能获得计数。

于 2010-01-31T07:18:45.187 回答
0

检查这个问题 http://drupal.org/node/891974。该代码用于每页的帖子数量,但也可以轻松地用于其他过滤器。

于 2011-04-26T09:46:40.607 回答
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>
于 2015-12-29T17:03:38.820 回答