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


7

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

回答:


5

それで、@ 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のパラメーターとしてここで使用する必要がある値が表示されます。

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


スレッドのネクロマンシーで申し訳ありませんが、私はあなたの解決策を試してみましたが、実際に入力フィールドで事前に選択されたものを変更します-しかし、実際のビューはすでにレンダリングされています(非AJAXビュー)。最終的に、adminが選択されている場合は<Any>値を選択するJSスニペットをビューのフッターに追加し、ページを更新してビューフォームを送信します。原油ですが、今のところ機能します。

2

私はこうしました

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;
    }
  }
}

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


1

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

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

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

それは私が2つのオプションに絞り込まれた公開フィルターを持っているようなものですが、最初のオプションではなく2番目のオプションがデフォルトで選択されるようにしたいと思います。
Chaulky

上記の私の提案の1つはまだあなたのために働くはずです。2つのフィルターを使用して私の2番目の提案を試す必要がある場合があります。1つ目は使用可能なオプションを絞り込むため、2つ目はデフォルトで選択されるものを設定するためのフィルターです。
デビッドラニア2011

私はそれを試してみるが、あなたがこれでどこへ行くのか本当にわからない。あなたの提案を実験した後、私はもっと明確にする必要があるかもしれない。
Chaulky

フィルターを使用して、デフォルトで選択されるものを選択するにはどうすればよいですか?許可されているコンテンツタイプを絞り込むフィルターと、公開されている2つ目のフィルターを使用して、許可されている2つのタイプから選択できるようにしています。しかし、それはどのようにデフォルト値を選択するのに役立ちますか?
Chaulky、2011

1

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


0

投稿の下部を参照してください:

http://realguess.net/node/28

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

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