web-dev-qa-db-ja.com

ビュー2の公開フィルターのデフォルトの選択を変更する

ビューに公開フィルターがあり、ユーザーが2つの異なるコンテンツタイプから選択できるようになっています。公開されたフィルターのデフォルト値は、コンテンツタイプがアルファベット順で最初に来るものによって選択されるようです。したがって、ユーザーに「バンド」と「曲」のコンテンツタイプを選択させると、デフォルトは「バンド」になります。このデフォルト値を別のコンテンツタイプ(この例では「曲」)に変更したいと思います。このためのビューインターフェイスにオプションが見つかりません。これをhook_form_alter経由で行う必要がありますか?もしそうなら、私はそれをどのように正確に行いますか?

7
Chaulky

それで、@ David Lanierの提案した方法を試しましたが、頭を完全に包むことができませんでした。したがって、Drupal基本に戻って、hook_form_alter()アプローチから試してみました。いくつかのトラブルシューティングの後、 デフォルトのビューフィルター値の変更に関する投稿)も見つけました 。私は同じアプローチを取り、それを機能させました。以下は使用したコードで、サイト固有のものを削除するためにいくつかの変更を加えています。いつものように、「modulename」をモジュールの名前に置き換えてください。

function modulename_form_alter(&$form, $form_state, $form_id) {
 // is this the right form?
 if($form['#id'] == 'name-of-the-views-form-displayed') {
   if (empty($_GET['label-of-the-filter']))  {
    $form_state['input']['label-of-the-filter'] = 'default-value-for-filter';
   }
  }
}

name-of-the-views-form-displayedを、変更したいビューフォームの名前に置き換えてください。これを見つける最も簡単な方法は、ブラウザーでビューのソースを調べ(これはFirebugが大好きです)、form要素を見つけて、そのid属性を取得することです。フィルターの名前と設定する値を見つけるには、フィルターを変更して「検索」を実行します。アドレスバーを見ると、URLのパラメーターとしてここで使用する必要がある値が表示されます。

これが他の人たちにもこの問題を回避してくれることを願っています!

5
Chaulky

私はこうしました

function hook_form_views_exposed_form_alter(&$form, &$form_state) {

  global $user;
  $account = user_load($user->uid);
  $term = taxonomy_term_load($account->field_user_industry[LANGUAGE_NONE]['0']['tid']);

  unset($form['field_event_industry_tid']['#size']);
  if ($form['#id'] == 'views-exposed-form-events-events-pane') {
    // get the view argument if defined
    $term_filter=$_GET;
    unset($term_filter['q']);
    $term_arg = $term_filter;
    if (!empty($term_arg)) {
      $terms = $term_arg;
    }

    // change our input as required
    if (isset($terms)) {
      $form_state['input']['field_event_industry_tid'] = $terms['field_event_industry_tid'];
    }
    else{
      $form_state['input']['field_event_industry_tid'] = $term->tid;
    }
  }
}

私の場合、クエリに応じてデフォルト値を変更する必要がありましたが、変更しない場合は、必要な値を使用します。この方法は完全に機能します。

2
David

多分あなたはすでに答えを得たかもしれませんが、ここに私が解決した方法があります。ビューでフィルターを編集する場合、「リストを選択したアイテムに制限」というオプションがあります。私はそのオプションをチェックし、デフォルト値がリセットされたので、フィルターのデフォルト値はすべて(タグAnyで)です。

1
Oriol

フィルターが公開されると、フィルターの構成オプションで、サイトの各コンテンツタイプのチェックボックスが表示されます。ここでチェックするのは、エンドユーザーがビューを表示したときにデフォルトで選択されるものです。

一部のコンテンツタイプのみをフォームで使用できるようにし、それらの一部のみを事前に選択する必要がある場合は、次のようにする必要があります。2つのコンテンツタイプフィルターを追加します。

  • フィルター1 =使用可能なコンテンツタイプのみ。このフィルターを公開しないでください。
  • フィルター2 =露出フィルター。デフォルトで事前に選択する必要があるものをここで選択します。
1
David Lanier

投稿の下部をご覧ください:

http://realguess.net/node/28

[クライアントジェンダー]で何も選択せず、[オプション]をオンにした場合、この公開されたフィルターはオプションであり、設定できないようにするオプションが追加されます。ボックスがデフォルトの選択になります。男性アイテムを選択すると、ビューがレンダリングされているときのデフォルトの選択は男性になります。

0
Sid Kshatriya