Làm cách nào để tôi chỉ hiển thị 3 trong số các bài đăng mới nhất cho mỗi thuật ngữ trong một chế độ xem?


14

Với sự trợ giúp của một câu hỏi khác: Hiển thị các nút mới nhất cho mỗi thuật ngữ phân loại trong Chế độ xem Tôi có thể tạo chế độ xem tôi yêu cầu, ngoại trừ việc nó hiển thị tất cả các bài đăng cho mỗi thuật ngữ (được nhóm theo thuật ngữ)? Làm cách nào để giới hạn mỗi thuật ngữ chỉ hiển thị 3 bài đăng mới nhất của họ.

ví dụ

Học kỳ 1
- Bài 1
- Bài 2
- Bài 3

Học kỳ 2
- Bài 1
- Bài 2
- Bài 3

Học kỳ 3
- Bài 1
- Bài 2
- Bài 3

Câu trả lời:


9

Nếu bạn chỉ cần một nút, bạn có thể sử dụng mối quan hệ của nút Đại diện. Nhưng nếu bạn cần ba nút cho mỗi thuật ngữ, hãy sử dụng cái gì đó như Chế độ xem trường .

1) Tạo chế độ xem "con" cho nội dung. Một cái gì đó như thế này: nhập mô tả hình ảnh ở đây

Thêm đối số thuật ngữ phân loại, giới hạn máy nhắn tin, sắp xếp và vv: nhập mô tả hình ảnh ở đây

Bây giờ bạn có thể đính kèm quan điểm này với một cái khác.

2) Tạo chế độ xem phân loại: nhập mô tả hình ảnh ở đây

Thêm trường ID thuật ngữ ẩn và sau đó thêm trường Toàn cầu: Xem trường: nhập mô tả hình ảnh ở đây

Đừng quên cấu hình bộ đệm. Từ trang Xem trường Xem :

Rất khuyến khích sử dụng mô-đun này kết hợp với bộ nhớ đệm xem. Lượt xem Bộ đệm nội dung và Tác vụ bộ đệm là những cách tốt để xem bộ đệm.


Cảm ơn Kalabro. Cách tiếp cận của bạn là chính xác là tốt. Ban đầu tôi đã đi theo con đường này nhưng muốn xem liệu có cách nào tốt hơn là tạo ra rất nhiều lượt xem và sau đó nhúng chế độ xem sau khi xem.
Nigel Waters

2
Đó không phải là một tấn, @NigelWaters. Đó chỉ là hai: một cho các nút và một cho các điều khoản. Giải pháp này khá ổn định và tôi sử dụng nó cho danh sách lượt xem không chuẩn.
kalabro

Sự hiểu lầm của tôi. Tôi nghĩ rằng tôi cần phải tạo ra một cái nhìn cho mỗi nhóm.
Nigel Waters

Điều này là gần như hoàn hảo cho trường hợp sử dụng của tôi. Vấn đề duy nhất của tôi là liên kết "thêm" cho chế độ xem con, liên kết đến cùng một chế độ xem và vẫn chỉ hiển thị số lượng phần tử giới hạn! Các tiêu đề từ liên kết xem cha mẹ đến phân loại hoạt động như mong muốn.
Đánh dấu

Ahah - Tôi đã tạo một màn hình khối cho chế độ xem con tôi chỉ với n mục đầu tiên được hiển thị và liên kết nhiều hơn. Liên kết càng điều hướng đến màn hình trang và nó sẽ hiển thị tất cả các mục bằng máy nhắn tin. Tuyệt quá! Bây giờ vấn đề duy nhất là tiêu đề (trong chế độ xem chính) liên kết đến thuật ngữ phân loại, nhưng tôi có thể hủy liên kết đó hoặc thay đổi hiển thị trang của chế độ xem con sang cùng một URL.
Đánh dấu

7

Sau khi điều tra thêm, có vẻ như Tóm tắt Peek có thể chính xác là những gì bạn muốn. Ảnh chụp màn hình trên tài liệu dành cho Drupal 6 và nó hơi khác so với Drupal 7, vì vậy tôi đã đính kèm một số ảnh chụp màn hình được cập nhật.

  • Chọn Tóm tắt Peek từ 'Bộ lọc theo ngữ cảnh'> 'Khi giá trị bộ lọc không có trong URL'> 'Hiển thị tóm tắt'> 'Định dạng'

Chọn Tóm tắt Peek từ 'Bộ lọc theo ngữ cảnh'> 'Khi giá trị bộ lọc không có trong URL'> 'Hiển thị tóm tắt'> 'Định dạng'

  • Bạn sẽ thấy một cái nhìn của quan điểm phụ. Nhấp vào thiết bị bên cạnh máy nhắn tin cho nhóm bạn muốn giới hạn.

Nhấp vào biểu tượng tùy chọn máy nhắn tin

  • Nhập các mục tối đa để hiển thị trên các tùy chọn máy nhắn tin.

Trường đầu tiên trong Tùy chọn máy nhắn tin

Bạn sẽ phải chỉnh sửa máy nhắn tin cho mỗi và mọi nhóm bạn muốn giới hạn, điều này thật đáng tiếc.Khi bạn chỉnh sửa máy nhắn tin cho một nhóm, nó sẽ thay đổi cài đặt cho tất cả các nhóm. Nếu bạn muốn hiển thị một số nút cho mỗi nhóm khác với tổng số nhóm, hãy ghi đè lên đó trong cài đặt 'Định dạng' trong 'Bộ lọc theo ngữ cảnh' (trên ảnh chụp màn hình đầu tiên có màu tím).

Về cơ bản, nó có nhược điểm là tạo các chế độ xem [n] cho các nhóm [n], đây có thể là vấn đề về hiệu suất tùy thuộc vào số lượng nhóm bạn có, nhưng nó giới hạn truy vấn chỉ hiển thị số được đặt. Điều này có thể cải thiện hiệu suất của bạn, tùy thuộc vào trường hợp sử dụng của bạn. Như mọi khi, cache có trách nhiệm.


Dường như một máy nhắn tin không thể bị ghi đè trên mỗi nhóm. Nhấn chỉnh sửa trên máy nhắn tin trong một nhóm, kéo lên cài đặt máy nhắn tin chính. Trừ khi tôi đang thiếu một cái gì đó?
Nigel Waters

À, đúng rồi Chà, thật hoàn hảo. Bạn sẽ có thể giới hạn tất cả chúng cùng một lúc.
beth

Thật không may, điều đó có nghĩa là máy nhắn tin cũng ảnh hưởng đến số lượng nhóm được hiển thị. Tôi cho rằng bài viết gốc của tôi là sai lệch vì ví dụ chỉ hiển thị ba thuật ngữ với ba bài viết mỗi bài. Tôi cần hiển thị 10 điều khoản trở lên với 3 bài đăng mỗi thuật ngữ trên một trang. Rất gần :(
Nigel Waters

Tôi đã sai về "các mục ghi đè để hiển thị" không làm gì cả. Sử dụng để xác định có bao nhiêu nhóm để hiển thị. Nhập '0' cung cấp cho bạn các nhóm vô hạn.
beth

2

Một cách để hạn chế điều này trong mã sẽ là thêm một cái gì đó như sau vào một mô-đun tùy chỉnh:

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

Đây là để xem các thuật ngữ phân loại được kết nối với các nút thông qua mối quan hệ. Nếu bạn chỉ có chế độ xem các nút, số dặm của bạn có thể thay đổi.

Mặc dù nó ngăn không cho hiển thị hơn 3 mỗi thuật ngữ, nhưng điều này sẽ không ngăn truy vấn trả về tất cả các kết quả cho mỗi thuật ngữ, vì vậy nó hoàn toàn không cải thiện hiệu suất SQL. Nếu bạn có số lượng kết quả rất lớn cho mỗi thuật ngữ, hãy hiển thị bảng điều khiển chế độ xem riêng biệt và đặt tất cả chúng vào một vùng bằng cách sử dụng Trình quản lý trang CTools để bạn không chạy các truy vấn lớn.

Như mọi khi, bạn sẽ muốn lưu trữ những thứ này vào sản xuất.


2
Thực sự không cần bình luận về giới tính của tôi. Nó khá là tai hại. t.co/i1dKE8hQ t.co/ATfV3mBG Dù sao, Hook_views_pre_build()hoặc hook_build_pre_execute()có thể sử dụng được cho những thứ như thế này làm giảm hiệu suất, nhưng tôi không quen với những thứ đó. Hoặc bạn có thể thích câu trả lời của tôi cho câu hỏi này trước đây .
beth

Cập nhật: Tôi có thẩm quyền tốt (Crell và stevector) rằng "Bạn không thể giới hạn từng nhóm riêng biệt trong một truy vấn duy nhất. Bạn phải làm điều đó trong giai đoạn kết xuất. Thật đáng buồn, SQL không thể làm điều đó." Họ cũng nói "Điều tốt nhất bạn có thể làm là một loạt các truy vấn hợp nhất" nhưng họ không nghĩ rằng Lượt xem cũng có thể làm điều đó.
beth

Ah, tôi nhầm bạn với OP. Trong mọi trường hợp, mô-đun Tóm tắt Peek có thể hữu ích trong trường hợp này, mặc dù nó trình bày các vấn đề về hiệu suất của chính nó. Người tạo ra nó cảnh báo rằng đó là "loại thô thiển, nhưng tuyệt vời."
beth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.