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.