web-dev-qa-db-ja.com

クリックイベントでAJAXを使用してビューを再読み込みします

別のノードのページに埋め込まれている関連ノードのテーブルを表示するビューがあります。埋め込みビューに表示される情報は定期的に変化します。ユーザーがページ全体を再読み込みせずに[ビューの更新]リンクまたはボタンをクリックしてビューを更新できるようにしたいと考えています。

私は自動リロード機能を提供するviews-hacksモジュールをチェックアウトしましたが、それは私がそれをするのに必要なことを正確には行いません。

2
user2014

ここで少しコーディングしないと、あなたはそうすることができないと思います。最初に頭に浮かぶのは、

  1. フォームAPI 更新ボタンの場合、
  2. views_embed_view() 現在のバージョンのビューを取得します。
  3. AHAH javascript replacement ビュー出力の置換、および

モジュール Views Auto-refresh あなたから言及された、または Ajax Views Refresh は、あなたが望んでいることを正確に実行しない可能性がありますが、ビューの更新を実装するときのインスピレーションの源となる可能性があります。

DrupalコアのPollモジュールのコード、主に関数 poll_choice_js (パスのコールバック関数poll/js)および poll_form$form['choice_wrapper']['poll_more']

1
Jan Tomka

Drupal.behaviorsを使用する必要があります。

時間がないため、コードをテストしていませんが、これは基本的にロジックです...

    Drupal.behaviors.myViewsRefresh = {
      attach: function( context , settings) {

        var viewName = 'the-name-of-your-views';

        // Your views should be Ajax enabled,
        // then it will be available as a property of the Drupal object
        // like so...
        var instances = Drupal.views.instances;
        var yourViews;

        // then you simply need to iterate thru the various
        // views instances name to find your views
        $.each( instances , function getInstance( index, element){
              if(element.settings.view_name == viewName ){
                  yourViews = '.view-dom-id-' + element.settings.view_dom_id;
              }
        });

        // Define your button click here...
        $('.yourButtonClass').click( function(){

            if(typeof yourViews !== 'undefined'){
              $(yourViews).trigger('RefreshView'); 
            }

        });            
      }
    }
1
PatrickS

公開フィルターを作成します。 firebugまたは同様の拡張機能を使用してhtmlを表示し、公開されたフィルターを送信するフォームのhtmlをコピーします。すべての選択オプションを削除して送信ボタンだけを残し、「ビューの更新」などの名前に変更します。このhtmlを受け取り、ヘッダーに挿入します(モードを完全なhtmlに設定してください)。ほら、リフレッシュオンデマンドフォーム。

0
Matt