公開されたフィルターの結果の量を表示


10

私のビューのコンテンツをフィルタリングするためにいくつかの公開されたフィルターがあります。それらのほとんどは分類用語ですが、分類用語の後ろにその用語でタグ付けされているノードの数を示します。

例:

London (5)
Paris (3)
Madrid (2)
...

どうすればこれを行うことができますか?

回答:


4

これを行うためのサンプルコードを以下に示します。

function hook_form_alter(&$form, &$form_state, $form_id) {
    switch($form_id) {
        case 'views_exposed_form':

            $allowed_categories = db_query("SELECT 1 as tid, "Term Name (2)" as `name`")->fetchAllKeyed();
            $allowed_categories = array_reverse($allowed_categories, TRUE);
            $allowed_categories['All'] = '- Any -';
            $allowed_categories = array_reverse($allowed_categories, TRUE);

            $form['field_category_tid']['#options'] = $allowed_categories;

            break;
    }
}

クエリを変更して、2つの列(tidとカウント付きの名前)を返すようにします。


1

でモジュールを作成しましたhook_form_alter()

その関数で、特定の分類用語に接続されているノードをカウントするクエリを作成し、すべての用語の最後にこの数を追加しました。


これに使用したコードを見る機会はありますか?事前にTHX!
Volker

@Volker:いくつかのサンプルコードで答えを追加しました...
Felix Eve

1
function hook_form_alter(&$form, &$form_state, $form_id) {
  switch($form_id){
    case 'views_exposed_form':
      if ($form_state['view']->name == 'viewname') {
    //must add some bool so this doesn't get into infinite loop
    if(!isset($form_state['view']->gg)){
      $form_state['view']->gg = TRUE;
      $form_state['view']->execute();
    }

    $form['results_count'] = array(
      '#markup' => t('!count results match your criteria', array('!count' => '<b>'.$form_state['view']->total_rows.'</b>')),
      '#weight' => -99,
    );
      }

      break;
  }
}

こんにちは、いらっしゃい。このコードは質問に答えるかもしれませんが、なぜどのように機能するのを説明するのは良い口調になるので、OPは他の人に頼って作品を書くだけでなく、そこから学ぶことができます。アイデアや知識が、彼は後には何かあるように見えますし、それが奨励されるべきでは良いことだ:)
Mołot

ループは非常に有用なアドバイスでした!thks
Kojo

0

いくつかのリンク(役に立つかもしれません)

  1. カウントオプションを持つモジュール分類メニュー
  2. これらについての質問ですが、信頼できる回答はありません。

0

これは私の実際のサイトの例です。field_marka_prochnostiは、分類語彙で表されるノードのフィールドです。phpMyAdminを使用して、テーブルの名前とそのテーブルのフィールドの名前を調べ、クエリを作成しました。bricksale_omegaは私のテーマの名前です。

function bricksale_omega_form_alter(&$form, &$form_state, $form_id) {
switch($form_id){
case 'views_exposed_form':

  foreach ($form['field_marka_prochnosti_tid']['#options'] as $tid => &$value) {
    $query = db_select('field_data_field_marka_prochnosti', 'f')
            ->condition('f.field_marka_prochnosti_tid', $tid);
    $query->addExpression('COUNT(*)');
    $count = $query->execute()->fetchField();
    $value = $value . ' (' . $count . ')';
  }

  break;
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.