다른 질문의 도움으로 : 뷰에서 각 분류 용어에 대한 최신 노드 표시 각 용어에 대한 모든 게시물을 표시하는 것을 제외하고 필요한 뷰를 만들 수 있습니까? 최신 게시물 중 3 개만 표시하도록 각 용어를 제한하는 방법
예 :
1 학기
-게시물 1-
게시물 2-
게시물 3
2 학기
-게시물 1-
게시물 2-
게시물 3
3 학기
-게시물 1-
게시물 2-
게시물 3
다른 질문의 도움으로 : 뷰에서 각 분류 용어에 대한 최신 노드 표시 각 용어에 대한 모든 게시물을 표시하는 것을 제외하고 필요한 뷰를 만들 수 있습니까? 최신 게시물 중 3 개만 표시하도록 각 용어를 제한하는 방법
예 :
1 학기
-게시물 1-
게시물 2-
게시물 3
2 학기
-게시물 1-
게시물 2-
게시물 3
3 학기
-게시물 1-
게시물 2-
게시물 3
답변:
하나의 노드 만 필요한 경우“대표 노드”관계를 사용할 수 있습니다. 그러나 각 용어 당 세 개의 노드가 필요한 경우 Views Field View 와 같은 것을 사용하십시오 .
1) 컨텐츠에 대한 "자식"보기를 작성하십시오. 이 같은:
분류 용어 인수, 호출기 제한, 정렬 등을 추가하십시오.
이제이 뷰를 다른 뷰에 연결할 수 있습니다.
2) 분류보기 작성 :
숨겨진 용어 ID 필드를 추가 한 다음 "전역 :보기"필드를 추가하십시오.
캐싱을 구성하는 것을 잊지 마십시오. 에서 조회 필드보기 페이지 :
이 모듈을 뷰 캐싱과 함께 사용하는 것이 좋습니다. 보기 컨텐츠 캐시 및 캐시 조치는보기를 캐싱하는 좋은 방법입니다.
추가 조사 결과, Peek Summary 가 원하는 것 같습니다 . 설명서의 스크린 샷은 Drupal 6 용이며 Drupal 7과 약간 다르므로 업데이트 된 스크린 샷을 첨부했습니다.
제한하려는 각 그룹마다 호출기를 편집해야합니다. 이는 불행한 일입니다.한 그룹의 호출기를 편집하면 모든 그룹의 설정이 변경됩니다. 총 그룹 수와 다른 그룹당 여러 노드를 표시하려면 '컨텍스트 필터'아래의 '포맷'설정 (첫 번째 스크린 샷의 자주색)에서이를 무시하십시오.
기본적으로 [n] 그룹화에 대한 [n]보기를 작성하는 단점이 있습니다. 이는 그룹화 수에 따라 성능 문제가 될 수 있지만 조회를 표시하도록 설정된 수로 만 제한합니다. 사용 사례에 따라 성능이 향상 될 수 있습니다. 항상 그렇듯이 책임감있게 캐시하십시오.
코드에서 이것을 제한하는 방법은 다음과 같은 것을 사용자 정의 모듈에 추가하는 것입니다.
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;
}
관계를 통해 노드에 연결된 분류 용어를보기위한 것입니다. 노드를 보는 경우 마일리지가 다를 수 있습니다.
용어 당 3 개 이상을 표시하지 못하더라도 쿼리가 각 용어에 대한 모든 결과를 반환하는 것을 막지는 못하므로 SQL 성능이 전혀 향상되지 않습니다. 각 용어에 대해 결과가 매우 많은 경우 별도의보기 패널 표시를 만들고 CTools Page Manager 와 같은 것을 사용하여 하나의 영역에 표시 하면 큰 쿼리가 실행되지 않습니다.
항상 그렇듯이 프로덕션 환경에서이 항목을 캐시하려고합니다.
Hook_views_pre_build()
또는 hook_build_pre_execute()
성능 저하를 줄여 이런 일에 사용할 수 있습니다,하지만 난 그 잘 알고로 아니에요. 아니면 당신은 이전에이 질문에 대한 나의 대답을 원할 것 입니다.