web-gelistirme-sc.com

Görünüm için gerekli ek js / css dosyaları da yüklenecek şekilde ajax ile bir görünüm nasıl yüklenir?

Şu anda böyle bir görünüm yüklemek için jQuery kullanıyorum:

$.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!');
    }
  });

Benim sorunum, örneğin görünüm 'Alan Slayt Gösterisi' modülünü kullanırsa, düzgün çalışması için gereken js/css dosyaları yüklenmez. Buna Nice (= zarar görmemiş yavru kedi) çözümü ne olabilir?

8
Temaruk

Hmm, bu soru daha büyük bir ödül hak ediyor gibi hissediyorum :-p ama hiçbiri daha az burada cevap verme girişimim.

Drupal zaten herhangi bir ekstra css/js yükler Şimdi gerçekten çok fazla belge bulamıyorum ve ne yazık ki JS dosyaları aslında kodu okumadan kolayca belgelenmez ama orada.

Gerçekten $ .ajax isteği kendiniz yapmaktan kaçınmalısınız ve bunun yerine her şeyi Drupal.ajax ile sarmak için de çalışmalısınız.

Ajax komutlarını kullanarak uygun bir Drupal ajax isteği uygulayarak css/js işlemenin çoğu sizin için otomatik olarak yapılacaktır.

Yukarıdaki kodunuza bakarak, aynı istek görünümlerini normalde kendi kendine yapacağınız gibi görünüyor. Bu nedenle, görünümlerin ajax isteğini işlemesine izin vermeli ve komutunuz olarak tetiklenecek olan ajax komutlarının üzerine yazmalısınız. Bunu bir hook_ajax_comamnd_alter uygulayarak yapabilirsiniz ama görünümleri ile berbat gibi tüm bağlamsal bilgileri kaybettiğiniz için bunun yerine hook_views_ajax_data_alter kullanmanızı tavsiye ederim.

Cevabımda çok fazla kod olmadığını biliyorum, ama şu anda kodun doğru olmadığı için kodla cevap vermek zor.

Daha fazla bilgi için misc/ajax.js dosyasındaki Drupal.ajax dosyasına bakın. Drupal.ajax ile bir ajax isteği uygulama örneği için görünümler ajax dosyasına bakın. Ve görmek istiyorsanız ve ajax komutlarını değiştirerek normal davranışın üzerine yazıldığını görmek istiyorsanız, bu davranışı yaptığım views_load_more modülüne bakın.

Ayrıca, burada bir şey net değilse, bu cevap hakkında yorum yapmaktan çekinmeyin.

Ajax Framework hakkında ve daha fazla bilgi için bkz. Ajax Framework örneğin örnek modülüne bakın, hatta yapmak istediğiniz şeylerin çoğunun örnekler modülünde yer almadığını düşünün.

7
ericduran