Bir görünümde her terim için en son yayınlardan yalnızca 3 tanesini nasıl gösterebilirim?


13

Başka bir soru yardımı ile: Views'da her sınıflandırma terimi için en yeni düğümleri göster Her terim için tüm yayınları (terime göre gruplandırılmış) göstermesi dışında, istediğim görünümü oluşturabildim? Her terimi en son yayınlarından yalnızca 3 tanesini görüntülemek için nasıl sınırlayabilirim?

Örneğin

Dönem 1
- Yazı 1
- Yazı 2
- Yazı 3

Dönem 2
- Yazı 1
- Yazı 2
- Yazı 3

Dönem 3
- Yazı 1
- Yazı 2
- Yazı 3

Yanıtlar:


9

Yalnızca bir düğüme ihtiyacınız varsa “Temsili düğüm” ilişkisini kullanabilirsiniz. Ancak her terim için üç düğüme ihtiyacınız varsa, Görünümler Alan Görünümü gibi bir şey kullanın .

1) İçerik için "alt" görünüm oluşturun. Bunun gibi bir şey: resim açıklamasını buraya girin

Sınıflandırma terimi bağımsız değişkeni, çağrı cihazı sınırları, sıralama vb. Ekleyin: resim açıklamasını buraya girin

Şimdi bu görünümü bir başkasına ekleyebilirsiniz.

2) Sınıflandırma görünümü oluşturun: resim açıklamasını buraya girin

Gizli terim kimliği alanı ekleyin ve ardından “Global: Görünüm” alanını ekleyin: resim açıklamasını buraya girin

Önbelleği yapılandırmayı unutmayın. Gönderen Görüntüleme Saha Görünümü sayfası:

Bu modülün görünüm önbelleklemesi ile birlikte kullanılması önemle tavsiye edilir. Görünümler İçerik önbelleği ve Önbellek İşlemleri, görünümleri önbelleğe almanın iyi yoludur.


Teşekkürler Kalabro. Yaklaşımınız da doğru. Başlangıçta bu rotaya gidiyordum ama bir ton görünüm oluşturmaktan daha iyi bir yol olup olmadığını görmek istedim ve sonra görünümden sonra görünümü gömdüm.
Nigel Waters

2
Bu bir ton değil, @NigelWaters. Bu sadece iki: biri düğümler için ve diğeri terimler için. Bu çözüm oldukça kararlıdır ve standart olmayan görünüm listeleri için kullanıyorum.
kalabro

Yanlış anlaşılmam. Her grup için bir görüş yaratmam gerektiğini düşündüm.
Nigel Waters

Bu benim kullanım durumum için neredeyse mükemmel. Tek sorunum, bir alt görünüm için "daha fazla" bağlantısı, aynı görünüme bağlantılar ve yine de yalnızca sınırlı sayıda öğe görüntülüyor! Üst görünümdeki başlıklar, istenen şekilde çalışan sınıflandırmaya bağlanır.
Mark

Ahah - Çocuğumun görünümü için yalnızca ilk gösterilen n öğeyi ve daha fazla bağlantıyı içeren bir blok ekran oluşturdum. Daha fazla bağlantı sayfa ekranına gider ve tüm öğeleri çağrı cihazı ile görüntüler. Harika! Şimdi tek sorun, başlıklandırma (ana görünümde) sınıflandırma terimine bağlantılar, ama ben bunun bağlantısını kaldırabilir veya alt görünümün sayfa görünümünü aynı URL'ye değiştirebilirsiniz.
Mark

7

Daha fazla araştırma yapıldığında, Peek Summary tam olarak istediğiniz gibi olabilir. Belgelerdeki ekran görüntüleri Drupal 6 içindir ve Drupal 7'de biraz farklıdır, bu yüzden bazı güncellenmiş ekran görüntüleri ekledim.

  • 'Bağlamsal Filtreler'> 'Filtre değeri URL'de olmadığında Gözetleme Özeti'ni seçin'> 'Özet görüntüle'> 'Biçim'

'Bağlamsal Filtreler'> 'Filtre değeri URL'de olmadığında Gözetleme Özeti'ni seçin'> 'Özet görüntüle'> 'Biçim'

  • Alt görünümlerin bir görünümünü görürsünüz. Sınırlamak istediğiniz grubun çağrı cihazının yanındaki dişli çark simgesini tıklayın.

Tıklama çağrı cihazı tercihleri ​​simgesi

  • Çağrı cihazı seçeneklerinde görüntülenecek maksimum öğeleri girin.

Çağrı Seçenekleri altındaki ilk alan

Sınırlamak istediğiniz her bir grup için çağrı cihazını düzenlemeniz gerekir, bu talihsiz bir durumdur.Bir grup için çağrı cihazını düzenlediğinizde, tüm grupların ayarlarını değiştirir. Grup başına toplam grup sayısından farklı sayıda düğüm görüntülemek istiyorsanız, 'Bağlamsal Filtreler' altındaki 'Biçim' ayarlarında (mor renkte ilk ekran görüntüsünde) bunu geçersiz kılın.

Temelde [n] gruplamaları için [n] görünümleri oluşturmanın dezavantajı vardır; bu, sahip olduğunuz grupların sayısına bağlı olarak bir performans sorunu olabilir, ancak sorguyu yalnızca görüntülenecek şekilde ayarlanan sayı ile sınırlar. Bu, kullanım durumunuza bağlı olarak performansınızı artırabilir. Her zaman olduğu gibi, sorumlu bir şekilde önbellekleyin.


Bir çağrı cihazının grup başına geçersiz kılınamayacağı anlaşılmaktadır. Bir gruptaki çağrı cihazında düzenlemeye basarsanız, ana çağrı cihazı ayarları yukarı çekilir. Bir şey eksik olmadıkça?
Nigel Waters

Ah, haklısın. O zaman bu mükemmel. Hepsini bir kerede sınırlandırabileceksiniz.
Beth

Maalesef bu, çağrı cihazının gösterilen grup sayısını da etkilediği anlamına gelir. Sanırım orijinal yazım yanıltıcıdır, çünkü örnek her biri üç gönderi olan üç terimi gösterir. Tek bir sayfada dönem başına 3 gönderi ile 10 veya daha fazla terim göstermem gerekiyor. Çok yakın :(
Nigel Waters

Hiçbir şey yapmadan "görüntülemek için öğeleri geçersiz kıl" hakkında yanılmışım. Kaç grup gösterileceğini belirlemek için bunu kullanın. '0' girilmesi size sonsuz gruplar verir.
Beth

2

Bunu kodda sınırlamanın bir yolu, özel bir modüle aşağıdakine benzer bir şey eklemek olacaktır:

function custom_views_pre_render(&$view) {
  //get the rows from the view just before render
  $results = $view->result;
  //create a counter
  $count = '';
  //we're going to built up a new $result array
  $new_results = array();
  //iterate through each view row
  foreach($results as $result) {
    //find the taxonomy term
    $term = $result->taxonomy_term_data_name;
    //add the term to a string of all the terms we've seen so far
    $count .= $term;
    //make sure to separate them with spaces to make them easier to count
    $count .= ' ' ;
    //count how many rows have the same term as the current one
    $term_count = array_count_values(str_word_count($count, 1));

    if($term_count[$term] <= 3){
      //if this is the third or fewer row with this term, add it to the new result array
      $new_results[] = $result;
    }
  }
  //instead of the normal view output, only show the results we put in our array.
  $view->result = $new_results;
}

Bu, bir ilişki yoluyla düğümlere bağlanan sınıflandırma terimlerinin bir görünümü içindir. Düğümlerin yalnızca bir görünümü varsa, kilometreniz değişebilir.

Her terim için 3'ten fazla görüntülemeyi engellemesine rağmen, bu, sorgunun her terim için tüm sonuçları döndürmesini engellemez, bu nedenle SQL performansını hiç iyileştirmez. Her terim için çok sayıda sonucunuz varsa , ayrı görünüm paneli ekranları oluşturmak ve CTools Sayfa Yöneticisi gibi bir şeyi kullanarak hepsini tek bir bölgeye koymak, böylece büyük sorgular çalıştırmamanız.

Her zaman olduğu gibi, bunları üretimde önbelleğe almak isteyeceksiniz.


2
Cinsiyetim hakkında yorum yapmaya gerçekten gerek yok. Oldukça zarar verici. t.co/i1dKE8hQ t.co/ATfV3mBG neyse, Hook_views_pre_build()veya hook_build_pre_execute()performans isabet azalttığı böyle bir şey için kullanılabilir olabilir, ancak bu aşina olduğu değilim. Ya da daha önce bu soruya cevabımı beğenebilirsiniz .
Beth

Güncelleme: "Her grubu ayrı bir sorguda ayrı ayrı sınırlayamazsınız. Oluşturma aşamasında yapmanız gerekir. SQL bunu ne yazık ki yapamaz." "Yapabileceğiniz en iyi sendika sorguları dizisidir" dediler, ancak Views'un da bunu yapabileceğini düşünmüyorlar.
12'de beth

Ah, seni OP için yanlýţ yaptým. Her durumda, Peek Özet modülü bu durumda kendi performans sorunlarını sunsa da yararlı olabilir. Yaratıcısı, bunun "biraz kaba, ama biraz havalı" olduğu konusunda uyarıyor.
Beth
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.