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>

各リンクは、最初のコード ブロックでオプションの 1 つを選択する場合と同じように、括弧内にカウントを表示し、ドリル ダウンします。

これにアプローチする方法についての指針を提供できますか?ありがとう。

4

5 に答える 5

2

ビューについては、Better Exposed Filtersモジュールを参照してください。7.x バージョンにはこの機能があり、6.x バージョンのパッチも次の場所にあります。

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

于 2011-07-28T21:28:34.910 に答える
1

Solrは洗練されていますが、ビューの要約オプションも確認してください。この例は、ビューに付属する「アーカイブリスト」ビューの引数セクションで確認できます。

drupal.orgには他にもいくつかのファセットブラウジングモジュールがありますが、私はそれらについて個人的な経験を持っていません。

于 2010-01-31T09:07:01.387 に答える
0

この問題を確認してください http://drupal.org/node/891974。このコードは1ページあたりの投稿数を対象としていますが、他のフィルターでも簡単に実行できます。

于 2011-04-26T09:46:40.607 に答える
0

あなたが求めているのは、ビューが意図したものではありません。おそらく可能ですが、遅くて実装が難しいでしょう。

代わりに、Acquia が Apache Solr 用に作成したモジュールを見てください。それはあなたが本当に作ろうとしているファセット検索を行います。ケースが十分に単純であれば、それほど凝ったものは必要ないかもしれません。しかし、それは時間の問題です。カウントを取得するには州ごとにクエリを実行する必要があるため、パフォーマンスが大きな問題になります。

于 2010-01-31T07:18:45.187 に答える
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 に答える