Ajax yükleme davranışını Görünümler'de nasıl değiştiririm?


34

Bir blokta açıkta kalan bazı filtreler ile görüşüm var; AJAX ve otomatik gönder özelliğini kullanır, böylece filtre, bir seçenek değiştirilir değiştirilmez görünüm yeniden yüklenir.

Bir seçenek seçmek ve yeniden yüklenen görünüm arasındaki kısa gecikmede, tanıdık mavi AJAX atıcısı, formun altında bir yerde gösterilir (sanırım gizli gönder düğmesinin şu anda nerede bulunduğunu düşünüyorum).

Bu görüntüyü throbber öğesi için CSS'yi geçersiz kılarak özelleştirebileceğimi biliyorum, ancak onu kullanmamayı tercih ediyorum.

Yapmayı tercih ettiğim şey, jQuery animasyonu kullanarak, açıkta kalan filtre formunu (ve ideal olarak ana görünümü de) geçici olarak solmak. AJAX araması tamamlandığında geri kaybolurlar.

Bunun yapılmaması durumunda, Görüntüleme UI modülünün güncellenirken kullandığı aynı yöntemi kullanmak istiyorum, yani bu simgeyi sayfanın ortasına yerleştirmek:

görüntü tanımını buraya girin

Bu zaten yerleşik olduğu için, bu yükleme davranışının stilini / konumunu değiştirmek için bir yerlerde bir ayar olacağını varsaydım; Yine de böyle bir şans.

Bu yöntemlerden birini nasıl uygularım?

Drupal 7'yi Views 7.x-3.3 ile kullanıyorum.


Mmmm ... sabah projesi :)
Lester Peabody

Bunun içinde yapmanız gereken zaman aralığı nedir?
Lester Peabody

@Lester Üzerinde çalıştığım projelerden herhangi biri için bir engelleyici olmadığından büyük bir acelem yok ... ama beni rahatsız ettiğini itiraf etmeliyim! Seyirleri nadiren kullanırım ve buna “dahil olmak” için daha düşük bir seviyede zamanım (ya da açıkçası enerjim) yoktur; ama şimdi e-ticaret çabalarımı Drupal Commerce’e taşımaya başladığım için bu tür şeyleri yapabilmem gerekiyor. 7 günlük ödül dönemi boyunca iyi bir cevap alırsam ayın üzerinde olurum :)
Clive

Hey, görünümleri kısmak için özel modülümü (ayarlar yönetici sayfasıyla birlikte) oluşturmayı yeni bitirdim. Hala ilgileniyor musun? Birkaç gün içinde drupal.org içinde yükleyebilirim
ANDiTKO

1
#random -: -o @Clive'nin cevaplarla ilgili olduğunu düşündüm, hatta soru soruyorsun;): D
SGhosh

Yanıtlar:


42

Küçük bir jquery kullanmak sakıncası yoksa, her zaman şöyle bir şey yapabilir:

$('#view-id').ajaxStart(function(){
   $('#view-filters-id').fadeTo(300, 0.5);
});
$('#view-id').ajaxSuccess(function(){
   $('#view-filters-id').fadeTo(300, 1.0);
});

4
Evet, bu çözüme katılıyorum. Sadece, bu jQuery ajaxSendve daha fazla kontrol için ajaxCompletekoşul ile kullanılabileceğini unutmayın if (settings.url == '/views/ajax') {//... }.
kalabro

Vay ben gerçekten aşırı karmaşık şeyler şimdi çok açık görünüyor! Olayları görünümden ziyade filtre formuna eklemek zorunda kaldım (aksi takdirde ajaxSuccesssadece bir kez kovulur; olay otomatik olarak değiştirilene bağlı değildir çünkü sanırım <div>) ama bunun dışında mükemmel değil . Çok teşekkürler
Clive

@kalabro Bu konudaki yardımınız için tekrar teşekkür ederim, bununla cevabınızı ödül olarak ayırabilirsem; ama bunun için gerçekten işe yaramayan bir örnek olduğu için gitmeliyim :)
Clive

@Clive, çözümü bulduğuma çok sevindim :)
kalabro

1
JQuery 1.8'den itibaren, .ajaxSuccess () yöntemi yalnızca belgeye eklenmelidir . Yukarıdaki değerlerle kalabro'nun önerdiği gibi, ayar değerlerini karşılaştırmanın yolu budur. Kaynak: api.jquery.com/ajaxSuccess
cjoy

29

Tamlık uğruna işte kullandığım kod; hem açığa çıkan filtre formunu hem de AJAX yükünün ne zaman başladığına dair görüşü yok eder ve bittiğinde tekrar içeri girer:

(function($) {
  Drupal.behaviors.events = {
    attach: function(context, settings) {
      $('#views-exposed-form-events-page', context).ajaxStart(function(){
        $('#views-exposed-form-events-page,div.view-id-events', context).fadeTo(300, 0.5);
      });
      $('#views-exposed-form-events-page', context).ajaxSuccess(function(){
         $('#views-exposed-form-events-page', context).fadeTo(300, 1.0);
         $('div.view-id-events', context).css('opacity', 0.5).fadeTo(300, 1.0);
      });
    }
  };
})(jQuery);

Müthiş! Bunun senin için işe yaradığı için memnunum.
Şans G

Drupal 6'da bu nasıl yapılır?
Ryan G

gerçekten harika, ama sadece bir kez geçerlidir :)
Kojo

10

Merhaba, tam olarak ne yapmak istediğinizi ayarlayan çok basit bir modül yarattım. Modül, kısma stilini kontrol edebildiğiniz ve kendi resimlerinizi kesmeden yükleyebileceğiniz bir konfigürasyon sayfasına sahiptir.

Bu sanal alan bağlantısıdır: http://drupal.org/sandbox/ANDiTKO/1556808

Yararlı bulursanız, lütfen buraya yazınız, böylece resmi proje olarak onaylanmalıdır: http://drupal.org/node/1556114


Çok harika görünüyor :) :) Yüklenip alacağım ve inceleme şansı bulduğumda yorum yazacağım
Clive

6

Sadece bir araştırma yaptım. Kodlanma burada kurucuları içindedir . Bir örneği saklanmaz ve bununla ilgili bir şey vardır. Bu, nesneye giremeyeceğimizi ve kendi paramlarımızı koyamayacağımız anlamına gelir.
throbberDrupal.views.ajaxView
Drupal.views.ajaxViewDrupal.ajax @todo

Görüntüleme nasıl çalışır?

Kısa cevap CSS'dir.
Görünümler admin sayfası sadece üstünü gizler throbber ve stil ekler .ajax-progress-throbber.

.ajax-progress-throbber {
  background-color: #232323;
  background-image: url("../images/loading-small.gif");
  background-position: center center;
  background-repeat: no-repeat;
  -moz-border-radius: 7px;
  -webkit-border-radius: 7px;
  border-radius: 7px;
  height: 24px;
  opacity: .9;
  padding: 4px;
  width: 24px;
}

Drupal.ajax ile bir şeyler yapabilir miyim?

Evet, AJAX öğelerinin üzerine yazabileceğiniz bazı yöntemler buldum (düğmeler, bağlantılar vb.). Burada bir örnek gösterdim: Drupal Form AJAX nasıl uzatılır veya “bağlanır”? . Ancak bu durumda o kadar iyi olmayacak.
İlerleme öğesi beforeSendaşamada gösteriliyor , bu yüzden gerçekleşmeden önce bir şeyler yapabilirsiniz.


Bilgi için çok teşekkürler, ancak sorunumu çözmek için nasıl kullanacağımdan emin değilim; En azından Görünümler modülünü hacklemeden, varsayılan Görünümler ajax yükleme davranışını CSS'nin ötesine eklemek / değiştirmek mümkün değil mi?
Clive

Yani, CSS'yi de kullanabilirsiniz, çünkü Görünümler de kullanır. Sadece .throbberbazı stilleri gizleyin ve ekleyin.ajax-progress-throbber
kalabro

Tamam, bloktaki açıkta kalan filtre formu ve görünümün kendisi, .ajax-progress-throbberherhangi bir AJAX'in ne zaman çağrılacağı konusunda bir sınıf alıyor mu? Bunun olduğunu farketmediğimi itiraf etmeliyim ama kontrol edeceğim. Ve sen bir beforeSendişlevde jQuery animasyonunu çağırabileceğimi mi düşünüyorsun (diğer sorunuzun cevabına dayanarak)? Teşekkürler, Views'ı gerçekten kullanmıyorum ve neler olup bittiğini öğrenmek için her kodu bir parçaya sokmaktan rahatsız olamıyorum! Bunu denemeyle nasıl başa çıkacağımı size anlatacağım
Clive

1
Form öğeleri üzerinde istediğiniz solma efektini elde etmek için akılda tutulması gereken bir şey de, jQuery animasyonları tüm tarayıcılarda ve CSS Geçişleri'nde yalnızca en yeni nesilde çalışacak olsa da, jQuery animasyonları yerine CSS Geçişlerini de kullanabilirsiniz.
Lester Peabody

Teşekkürler @Lester, şu an için jQuery kullanmayı tercih ederim. @kalabro ne yazık ki öneriniz çalışmıyor; Ne görünüm, ne de maruz kalan filtre bloğu, .ajax-progress-throbbermetodun işe yaramayacağı şekilde herhangi bir noktada onlara uygulanan sınıfı almaz. Yine de denediğiniz için teşekkürler
Clive
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.