web-dev-qa-db-ja.com

あるビューのフィルターパラメーターを同じページの別のビューに渡すにはどうすればよいですか?

概要

同じページに2つの別々のビューがあります。1つのページと1つのブロックは、それぞれ2つの別々のコンテンツタイプを表示しますが、それらが共有するフィールドにフィルターが公開されています。

最初のビューのページで、2番目のブロック表示を新しい領域にアタッチしました。可能であれば、最初のビューの公開されたフィルターのフィルター値を2番目のブロックビューのフィルター値にもフィードする必要があります。

現在の設定方法

私には2つの見方があります。

最初のビュー「ローカルブランチ」はページ表示タイプローカルブランチのコンテンツを表示します。このコンテンツタイプにはLocationモジュールが提供するLocationフィールドがあります。ビューページには、公開されたフィルター基準があります:

場所:距離/近接

これは、テキストフィールドとしてユーザーに公開され、フィルター設定のOriginはPostal Codeに設定されます。

次に、コードは距離/近接度でソートされます。

したがって、ビューページには、ユーザーが郵便番号を入力できるテキストフィールドがあり、その郵便番号に最も近い結果が返されます。


2番目のビュー「Shops」は、タイプ「Shops」のコンテンツを表示するBlock displayです。このコンテンツタイプは、 "ローカルブランチ"コンテンツタイプとほぼ同じですが、場所フィールドも含まれています。

このビューでは、再び公開されたフィルターがあります。

場所:距離/近接

まったく同じ方法で設定されますが、これはブロック表示であることに注意してください。距離/近接度で再度ソートされます。


最後に、最初のビューの「ローカルブランチ」のページで、2番目のビューのブロック「ショップ」を別のリージョンに配置しました。

Shopsブロックが、「ローカルブランチ」ビューによって作成されたURLから次のような公開されたフィルター設定を何らかの方法で取得することを願っています。

http://www.example.com/local-support?distance [postal_code] = EN11 + 8RX&distance [search_distance] = 100&distance [search_units] = mile

ご覧のとおり、公開された郵便番号検索フォームを強化する3つのパラメーターがあります。これは大まかな図です:

Rough diagram of the view page

問題

ブロックビューの「ショップ」は、URLのフィルター値に応答せず、任意にソートされたすべての結果を出力するだけです(他のソートATMはありません)。 「ローカルブランチ」ビューからの公開されたフィルター値を独自の公開されたフィルターとして使用しているかのように結果で応答したいと思います。

潜在的なソリューションとクエリ

プログラムで "Shops"ブロックを作成して、ビューページ/local-supportにレンダリングし、$_GETパラメータを使用してビューに直接フィードできるかどうかを確認することを試みました。出力を生成するコードは次のようになります。

function _mymodule_shop_block_view() {
  $view = views_get_view('shops');
  $view->set_display("block_1");
  $view->set_arguments($args);
  $view->pre_execute();
  $view->execute();
  $content = $view->render();

  return $content;
}

問題は、この場合の$argsの値が実際にどうなるかがわからないことです。ビューを削除してレンダリングしたいのですが、$_GET paramsを何らかの方法で渡しますが、それらは公開されたフィルターparamsなので、この場合$view->set_argumentsが実際に適切かどうかわかりません。


私のもう1つの考えは、「ショップ」ビューがブロック表示であるため、公開されたフィルターが正常に機能しないことです。それをページ表示として構築し、ロケーションフィルターをブロックとして公開してから、ブロックでレンダリングしてみることはできますか? CSSで公開されたフィルターを非表示にすることもできます(悪いことはわかっていますが、今までに推測していない場合は、これを機能させたいと思います)。


ブロックをページビューに添付して統合することはできますか?別のビュー間でビューの添付を行うことは可能ですか?


これを読んでいただきありがとうございます。私が達成しようとしていることについて十分な情報があることを願っています!

5
njp

はい、同じページで2つの異なるビューを使用して、同じ公開フィルタークエリパラメーターを共有することができます。

発生している問題は、デフォルトでは、ブロック表示に露出したフィルターが表示されないことです。これを有効にする唯一の方法は、管理UIのAdvancedセクションの下にあるブロックビューのse AJAX設定を有効にすることです。設定すると、ブロックビューとページビューの両方が同じlocation[postal_code]/location[distance]/location[search_units]クエリパラメータ。

もちろん、これは同じページに2つの異なるフォームフィルターが存在することを意味しますが、スタイルルールを使用して非表示にすることができます(例:#block-views-my_block_machine_name-block div.view-filters { display: none; })またはフォームを非表示にするその他の手段。

3
Shawn Conn

このモジュールは、まさにこの問題に最適です。

https://www.drupal.org/project/views_contextual_filter_query

1つのビュー(おそらくページビュー)の公開されたフィルターは、クエリパラメーターになります。 「デフォルトの引数を指定」>>「パラメータ名」の下で、クエリパラメータのキーをコンテキストフィルタ値として使用するだけです。完了しました。

0
cdmo