Bagaimana cara menampilkan hanya 3 dari posting terbaru untuk setiap istilah dalam tampilan?


13

Dengan bantuan pertanyaan lain: Tampilkan simpul terbaru untuk setiap istilah taksonomi dalam Tampilan Saya telah dapat membuat tampilan yang saya butuhkan, kecuali bahwa itu menampilkan semua posting untuk setiap istilah (dikelompokkan berdasarkan istilah)? Bagaimana cara membatasi setiap istilah untuk hanya menampilkan 3 posting terbaru mereka.

misalnya

Term 1
- Post 1
- Post 2
- Post 3

Term 2
- Post 1
- Post 2
- Post 3

Term 3
- Post 1
- Post 2
- Post 3

Jawaban:


9

Jika Anda hanya perlu satu simpul, Anda bisa menggunakan hubungan "Representatif simpul". Tetapi jika Anda membutuhkan tiga node per setiap istilah, gunakan sesuatu seperti Tampilan Bidang Tampilan .

1) Buat tampilan "anak" untuk konten. Sesuatu seperti ini: masukkan deskripsi gambar di sini

Tambahkan argumen istilah taksonomi, batas pager, penyortiran, dan sebagainya: masukkan deskripsi gambar di sini

Sekarang Anda dapat melampirkan tampilan ini ke yang lain.

2) Buat tampilan taksonomi: masukkan deskripsi gambar di sini

Tambahkan bidang ID istilah tersembunyi dan kemudian tambahkan bidang "Global: View": masukkan deskripsi gambar di sini

Jangan lupa mengkonfigurasi caching. Dari halaman Tampilan Bidang Tampilan :

Sangat disarankan untuk menggunakan modul ini bersama dengan cache pandangan. Cache Konten Tampilan dan Tindakan Cache adalah cara yang baik untuk menampilkan cache.


Terima kasih Kalabro. Pendekatan Anda juga benar. Saya awalnya menempuh rute ini tetapi ingin melihat apakah ada cara yang lebih baik daripada menciptakan satu ton tampilan dan kemudian menyematkan tampilan demi tampilan.
Nigel Waters

2
Itu bukan satu ton, @NigelWaters. Itu hanya dua: satu untuk node dan satu untuk istilah. Solusi ini cukup stabil dan saya menggunakannya untuk daftar tampilan non-standar.
kalabro

Kesalahpahaman saya Saya pikir saya perlu membuat tampilan untuk setiap grup.
Nigel Waters

Ini hampir sempurna untuk kasus penggunaan saya. Satu-satunya masalah saya adalah tautan "lebih" untuk tampilan anak, tautan ke tampilan yang sama, dan masih hanya menampilkan elemen dalam jumlah terbatas! Judul-judul dari tampilan pandangan orang tua ke taksonomi yang berfungsi seperti yang diinginkan.
Markus

Ahah - Saya membuat tampilan blok untuk tampilan anak saya dengan hanya n item pertama yang ditampilkan, dan tautan lainnya. Semakin banyak tautan menavigasi ke tampilan halaman, dan itu menampilkan semua item dengan pager. Bagus! Sekarang satu-satunya masalah adalah tajuk (dalam tampilan master) tautan ke istilah taksonomi, tapi saya bisa membatalkan tautan itu, atau mengubah tampilan halaman dari tampilan anak ke URL yang sama.
Markus

7

Setelah diselidiki lebih lanjut, sepertinya Intip Ringkasan mungkin persis seperti yang Anda inginkan. Tangkapan layar pada dokumentasi adalah untuk Drupal 6, dan ini sedikit berbeda di Drupal 7, jadi saya telah melampirkan beberapa tangkapan layar yang diperbarui.

  • Pilih Intip Ringkasan dari 'Filter Kontekstual'> 'Ketika nilai filter tidak ada di URL'> 'Tampilkan ringkasan'> 'Format'

Pilih Intip Ringkasan dari 'Filter Kontekstual'> 'Ketika nilai filter tidak ada di URL'> 'Tampilkan ringkasan'> 'Format'

  • Anda akan melihat tampilan sub-tampilan. Klik gear di sebelah pager untuk grup yang ingin Anda batasi.

Klik ikon preferensi pager

  • Masukkan item maks untuk ditampilkan pada opsi pager.

Bidang pertama di bawah Opsi Pager

Anda harus mengedit pager untuk setiap grup yang ingin Anda batasi, yang sangat disayangkan.Ketika Anda mengedit pager untuk satu grup, itu mengubah pengaturan untuk semua grup. Jika Anda ingin menampilkan sejumlah node per grup yang berbeda dari jumlah total grup, ganti itu dalam pengaturan 'Format' di bawah 'Filter Kontekstual' (pada tangkapan layar pertama berwarna ungu).

Ini memiliki kelemahan pada dasarnya membuat [n] tampilan untuk [n] pengelompokan, yang bisa menjadi masalah kinerja tergantung pada berapa banyak pengelompokan yang Anda miliki, tetapi membatasi permintaan hanya untuk angka yang ditetapkan untuk ditampilkan. Ini dapat meningkatkan kinerja Anda, tergantung pada kasus penggunaan Anda. Seperti biasa, cache secara bertanggung jawab.


Tampaknya pager tidak dapat diganti per grup. Menekan edit pada pager dalam grup, menarik pengaturan master pager. Kecuali saya kehilangan sesuatu?
Nigel Waters

Ah, benar juga. Nah, itu sempurna kalau begitu. Anda dapat membatasi semuanya sekaligus.
beth

Sayangnya itu berarti pager mempengaruhi jumlah grup yang ditampilkan juga. Saya kira posting asli saya menyesatkan karena contohnya hanya menampilkan tiga istilah dengan masing-masing tiga posting. Saya perlu menampilkan 10 istilah atau lebih dengan 3 posting per istilah dalam satu halaman. Begitu dekat :(
Nigel Waters

Saya salah tentang "menimpa item untuk ditampilkan" tidak melakukan apa-apa. Gunakan itu untuk menentukan berapa banyak grup yang akan ditampilkan. Memasukkan '0' memberi Anda grup tanpa batas.
beth

2

Cara untuk membatasi ini dalam kode adalah dengan menambahkan sesuatu seperti berikut ke modul khusus:

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;
}

Ini untuk tampilan istilah taksonomi yang terhubung ke node melalui suatu hubungan. Jika Anda hanya memiliki tampilan node, jarak tempuh Anda dapat bervariasi.

Meskipun mencegah tampilan lebih dari 3 per istilah, ini tidak akan mencegah permintaan mengembalikan semua hasil untuk setiap istilah, sehingga tidak meningkatkan kinerja SQL sama sekali. Jika Anda memiliki jumlah hasil yang sangat besar untuk setiap istilah, buat tampilan panel tampilan terpisah dan letakkan semuanya di satu wilayah menggunakan sesuatu seperti Pengelola Halaman CTools sehingga Anda tidak menjalankan kueri yang sangat besar.

Seperti biasa, Anda ingin menyimpan hal ini di produksi.


2
Benar-benar tidak perlu mengomentari gender saya. Cukup merusak. t.co/i1dKE8hQ t.co/ATfV3mBG Bagaimanapun, Hook_views_pre_build()atau hook_build_pre_execute()mungkin dapat digunakan untuk sesuatu seperti ini yang mengurangi hit kinerja, tapi saya tidak terbiasa dengan itu. Atau Anda mungkin menyukai jawaban saya untuk pertanyaan ini sebelumnya .
beth

Pembaruan: Saya memilikinya pada otoritas yang baik (Crell dan stevector) bahwa "Anda tidak dapat membatasi setiap grup secara terpisah dalam satu permintaan. Anda harus melakukannya dalam tahap rendering. Sayangnya, SQL tidak dapat melakukan itu, sayangnya." Mereka juga mengatakan "Yang terbaik yang bisa Anda lakukan adalah serangkaian permintaan gabungan" tetapi mereka tidak berpikir bahwa Views dapat melakukannya juga.
beth

Ah, saya salah mengira Anda sebagai OP. Bagaimanapun juga, modul Ringkasan Intip mungkin berguna dalam kasus ini, meskipun modul ini menyajikan masalah kinerjanya sendiri. Penciptanya memperingatkan bahwa itu "agak kotor, tapi agak keren."
beth
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.