ビューに必要な追加のjs / cssファイルも読み込まれるようにajaxでビューを読み込む方法は?


8

現在、私はこのようにjQueryを使用してビューをロードしています:

$.ajax({
    type: 'POST',
    url: Drupal.settings.basePath + 'views/ajax',
    dataType: 'json',
    data: 'view_name=' + viewName + '&view_display_id=default&view_args=' + viewArgument, // Pass a key/value pair.
    success: function(data) {
      var viewHtml = data[1].data;
      target.children().fadeOut(300, function() {
        target.html(viewHtml);

        var newHeightOfTarget = target.children().height();

        target.children().hide();

        target.animate({
          height: newHeightOfTarget
        }, 150);

        target.children().delay(150).fadeIn(300);

        Drupal.attachBehaviors(target);
      });
    },
    error: function(data) {
      target.html('An error occured!');
    }
  });

私の問題は、たとえば、ビューが「フィールドスライドショー」モジュールを使用している場合、適切に機能するために必要なjs / cssファイルがロードされないことです。これに対する素晴らしい(=子猫に害を与えない)解決策は何でしょうか?


これはD8 drupal.org/node/561858で解決されるようです。Drupal.settings.mymoduleのjs / cssファイルへのパスを渡し、jQuery.getScript()およびjQuery.getCSS()(github.com/furf/jquery-getCSSから)を使用してそれらを取得すると、回避策になる可能性があります...
Temaruk

どうやら、AjaxフレームワークはすでにDsでcss / js / libraryファイルを遅延読み込みしています。さらに深く掘り下げる必要がありますが、解決策はajaxページ配信を使用したビューごとのカスタムajaxメニューコールバックであると
思い

私が持っていた同様の問題私はここでそれへのリンクを置くところが、まだ未解決の私を。
SilkAdmin

完全な回答を書くのに十分な知識はありませんが、Chaos ToolsのAJAX APIはすでにこの問題を解決していたと思います。あなたはそれを使用したり、それをチェックアウトしたいかもしれません。編集可能フィールドもこの問題に何らかの形で対処しているため、確認する必要のある参照コードが増える可能性があります。
wizonesolutions

1
@silkAdmin、私もあなたの質問への回答を投稿しました。また、D7では実際にctoolsを使用する必要がないことにも注意してください。Ajaxフレームワークは、D7コア(にあるapi.drupal.org/api/drupal/includes--ajax.inc/group/ajax
ericduran

回答:


7

うーん、私はこの質問がより大きな報奨に値するように感じます:-pしかし、それでもこれに答えようとする私の試みがあります。

Drupalはすでに余分なcss / jsをロードしていますが、ドキュメントがあまり見つからず、残念なことに、JSファイルは実際にコードを読み取らずに簡単にドキュメント化することはできません。

$ .ajaxリクエストを自分で作成することは避け、代わりにすべてをDrupal.ajaxでラップする必要があります。Ajaxシステムを使用している場合は、自分でajaxリクエストを作成する必要さえありません。

ajaxコマンドを使用して適切なDrupal ajaxリクエストを実装することにより、ほとんどのcss / js処理が自動的に行われます。

上記のコードを見ると、ビューが通常は自分で行うのと同じリクエストを作成しているように見えます。したがって、おそらくビューにajaxリクエストを処理させ、コマンドとして起動される予定のajaxコマンドを上書きする必要があります。これは、hook_ajax_comamnd_alterを実装することによって行うことができますが、すべてのコンテキスト情報が失われるため、ビューにやや劣るので、代わりにhook_views_ajax_data_alterを使用することをお勧めします。

私の答えには多くのコードが含まれていないことはわかっていますが、現在コードが存在することは正しくないため、コードで答えることは困難です。

詳細については、misc / ajax.jsファイルのDrupal.ajaxを参照してください。Drupal.ajaxでajaxリクエストを実装する例については、views ajaxファイルを参照してください。また、ajaxコマンドを変更することでビューの通常の動作が上書きされる例を確認したい場合は、views_load_moreモジュールでこの動作を実行してください。

また、ここで不明な点がある場合は、この回答にコメントしてください。

上とAjaxフレームワークの詳細を参照するためにAjaxのフレームワーク例えば参照例のモジュールを、も、あなたがやりたいことのほとんどは、例のモジュールではカバーされていないと思いました。


それは正しい方向であるに違いありませんが、私は最初に確認したいと思います。質問をして以来、カスタムajaxコマンドの作成や使用など、Drupal 7のAjaxフレームワークの使用経験を積みました。私は問題を再検討し、何ができるかを確認し、私の発見に関する情報で更新します!ありがとう!
Temaruk 2013年

参照しているURLは存在しません:api.drupal.org/api/drupal/includes--ajax.inc/group/ajax
shekoufeh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.