web-dev-qa-db-ja.com

ブラウザの戻るボタンをクリックして結果を表示する

いくつかのリンクを表示するいくつかの公開フィルターのビューがあります。フィルターオプションを選択すると、ajax検索が実行され、結果が表示されます。 1つのリンクをクリックしてから、[ブラウザの戻る]ボタンをクリックして、ビューページに戻ります。

これで、フィルターオプションの結果ではなく、すべての結果が表示されます。

ビューがajax検索を記憶していることをどのようにして得ることができますか?

3
ilazgo

この質問への回答には、「Drupal以外」の部分を含める必要があります。「戻る」ボタンをクリックしたときに何が起こるかはブラウザに関連しているためです。


ブラウザで何が起こるか

私はこの問題の専門家ではありませんが、基本的にすべてのブラウザが「履歴キャッシュ」で行った最後のリクエストを追加し、「戻る」ボタンと「進む」ボタンを押すと、この「キャッシュ」で前後に移動します。

一般に、AJAXリクエストはこのキャッシュに含まれませんが、これはブラウザ固有です(私は、SafariがAJAXリクエスト)。Googleで検索すると、さまざまなブラウザでこれがどのように機能するかに関するさまざまなリソースを見つけることができます(キーワードは、「戻るボタンajax呼び出し」、および探しているブラウザの名前と同じです)。


ビューの「最後の選択を記憶する」設定

特定の質問については、次の2つのことに注意してください。

  1. ビューでは、ユーザーがユーザーによる最後の選択を公開フィルターの設定に保存できます。設定の名前は「最後の選択を記憶」です。この設定では、最後の選択が記憶されるロールを制限することもできます。
  2. ブラウザは実際にはしませんcareビューが行うこと、そして少なくともChrome(おそらく他のブラウザも同じようにする)の場合)、ページのキャッシュされたバージョン(別名ajax呼び出しを差し引いたもの)を返します。

上記のアサーションをテストするには、最後の選択オプションを設定し、[戻る]ボタンをクリックして(ブラウザーにキャッシュされたバージョンのページが表示されます)、[更新]ボタンをクリックします(ブラウザーがページを再度要求し、ビューがキックします。最後に使用したフィルターの適用を強制します)。


解決

グーグル検索「戻るボタンajax呼び出し」は多くの関連する結果を与える可能性がありますが、有名なDrupalの概念:「そのためのモジュールがあります」をテストしたい場合、実際にはその名前は「 Views AJAX History 」です。これは、 history.js JavaScriptライブラリ および Libraries API モジュール。


コンセプトの証明

私はすぐにここで私の回答に使用できる開発サイトを作成し、devel generateで50ノードを追加しました。 AJAX=有効になっているサンプルビュー こちら を見ることができます。 "Body contains"公開フィルターを使用してビューをフィルターした後、サンプル"oppeto"のような文字列を使用すると、ビューAJAX履歴の動作がすぐにわかります。呼び出しはAJAXによって行われますが、ブラウザのURLが公開されたフィルタの値で、ブラウザの履歴キャッシュに保存されます。

これで、ノードリンクをクリックして[戻る]ブラウザーボタンを押すと、フィルターされた正しいバージョンのビューに戻ります(Chromeでテストしましたが、テストできます)期待どおりに動作することを確認したいブラウザで)。


重要な警告

私が構築したいくつかのサイトでこのモジュールを使用しましたが、最も気になったのは、コアオーバーレイモジュールとの 既知の未解決の競合があるという事実です 。これらの特定のケースではオーバーレイを無効にする余裕があったので、私にとってはそれほど大きな問題ではありませんでしたが、オーバーレイに大きく依存している場合は、これを確実に検討する必要があります。たとえば、 Overlay Paths に依存してカラーボックスのようなポップアップを表示すると、自分が傷ついていることに気づくでしょう。

私のコアプロジェクトの1つでビューAJAX履歴を使用することを検討していますが、これを行うには、前に述べた問題を試す必要があります。いずれの場合も、特定の問題の進行状況を監視するか、自分でパッチを作成してみてください。

3
F1234k

ビューの表示がページであり、公開されたフィルターがブロックを介して表示される場合に機能するようです(そのページビュー表示の公開されたフォーム。 (私は [〜#〜] bef [〜#〜] を使用していますが、これは関係がないと思います。)

0
cptstarling