クリックイベントでAJAXを使用してビューを再読み込みします
別のノードのページに埋め込まれている関連ノードのテーブルを表示するビューがあります。埋め込みビューに表示される情報は定期的に変化します。ユーザーがページ全体を再読み込みせずに[ビューの更新]リンクまたはボタンをクリックしてビューを更新できるようにしたいと考えています。
私は自動リロード機能を提供するviews-hacksモジュールをチェックアウトしましたが、それは私がそれをするのに必要なことを正確には行いません。
ここで少しコーディングしないと、あなたはそうすることができないと思います。最初に頭に浮かぶのは、
- フォームAPI 更新ボタンの場合、
- views_embed_view() 現在のバージョンのビューを取得します。
- AHAH javascript replacement ビュー出力の置換、および
モジュール Views Auto-refresh あなたから言及された、または Ajax Views Refresh は、あなたが望んでいることを正確に実行しない可能性がありますが、ビューの更新を実装するときのインスピレーションの源となる可能性があります。
DrupalコアのPollモジュールのコード、主に関数 poll_choice_js (パスのコールバック関数poll/js
)および poll_form ($form['choice_wrapper']['poll_more']
)
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');
}
});
}
}
公開フィルターを作成します。 firebugまたは同様の拡張機能を使用してhtmlを表示し、公開されたフィルターを送信するフォームのhtmlをコピーします。すべての選択オプションを削除して送信ボタンだけを残し、「ビューの更新」などの名前に変更します。このhtmlを受け取り、ヘッダーに挿入します(モードを完全なhtmlに設定してください)。ほら、リフレッシュオンデマンドフォーム。