뷰에서 각 용어에 대해 3 개의 최신 게시물 만 표시하려면 어떻게합니까?


13

다른 질문의 도움으로 : 뷰에서 각 분류 용어에 대한 최신 노드 표시 각 용어에 대한 모든 게시물을 표시하는 것을 제외하고 필요한 뷰를 만들 수 있습니까? 최신 게시물 중 3 개만 표시하도록 각 용어를 제한하는 방법

예 :

1 학기
-게시물 1-
게시물 2-
게시물 3

2 학기
-게시물 1-
게시물 2-
게시물 3

3 학기
-게시물 1-
게시물 2-
게시물 3

답변:


9

하나의 노드 만 필요한 경우“대표 노드”관계를 사용할 수 있습니다. 그러나 각 용어 당 세 개의 노드가 필요한 경우 Views Field View 와 같은 것을 사용하십시오 .

1) 컨텐츠에 대한 "자식"보기를 작성하십시오. 이 같은: 여기에 이미지 설명을 입력하십시오

분류 용어 인수, 호출기 제한, 정렬 등을 추가하십시오. 여기에 이미지 설명을 입력하십시오

이제이 뷰를 다른 뷰에 연결할 수 있습니다.

2) 분류보기 작성 : 여기에 이미지 설명을 입력하십시오

숨겨진 용어 ID 필드를 추가 한 다음 "전역 :보기"필드를 추가하십시오. 여기에 이미지 설명을 입력하십시오

캐싱을 구성하는 것을 잊지 마십시오. 에서 조회 필드보기 페이지 :

이 모듈을 뷰 캐싱과 함께 사용하는 것이 좋습니다. 보기 컨텐츠 캐시 및 캐시 조치는보기를 캐싱하는 좋은 방법입니다.


감사합니다 Kalabro. 당신의 접근 방식도 정확합니다. 원래이 경로를 사용하고 있었지만 많은 뷰를 만든 다음 뷰 후에 뷰를 포함시키는 것보다 더 좋은 방법이 있는지 확인하고 싶었습니다.
Nigel Waters

2
@NigelWaters는 그렇지 않습니다. 노드와 용어에 대해 하나만 있습니다. 이 솔루션은 매우 안정적이며 비표준 뷰 목록에 사용합니다.
kalabro

내 오해 각 그룹에 대한보기를 작성해야한다고 생각했습니다.
Nigel Waters

이것은 내 유스 케이스에 거의 완벽합니다. 내 유일한 문제는 자식보기에 대한 "더보기"링크, 동일한보기에 대한 링크 및 여전히 제한된 수의 요소 만 표시하는 것입니다! 상위 뷰의 제목은 원하는대로 작동하는 분류 체계로 연결됩니다.
Mark

Ahah-첫 n 개 항목 만 표시되고 더 많은 링크가있는 자식보기에 대한 블록 표시를 작성했습니다. 링크가 많을수록 페이지 표시로 이동하고 호출기로 모든 항목을 표시합니다. 큰! 이제 유일한 문제는 마스터 뷰의 헤더가 분류 용어로 연결되는 것입니다. 그러나 링크를 해제하거나 하위 뷰의 페이지 표시를 동일한 URL로 변경할 수 있습니다.
Mark

7

추가 조사 결과, Peek Summary 가 원하는 것 같습니다 . 설명서의 스크린 샷은 Drupal 6 용이며 Drupal 7과 약간 다르므로 업데이트 된 스크린 샷을 첨부했습니다.

  • '컨텍스트 필터'> '필터 값이 URL에없는 경우'> '요약 표시'> '서식'에서 엿보기 요약을 선택하십시오.

'컨텍스트 필터'> '필터 값이 URL에없는 경우'> '요약 표시'> '서식'에서 엿보기 요약을 선택하십시오.

  • 하위보기가 표시됩니다. 제한하려는 그룹의 호출기 옆에있는 톱니 바퀴를 클릭하십시오.

호출기 환경 설정 아이콘을 클릭하십시오.

  • 호출기 옵션에 표시 할 최대 항목을 입력하십시오.

호출기 옵션 아래의 첫 번째 필드

제한하려는 각 그룹마다 호출기를 편집해야합니다. 이는 불행한 일입니다.한 그룹의 호출기를 편집하면 모든 그룹의 설정이 변경됩니다. 총 그룹 수와 다른 그룹당 여러 노드를 표시하려면 '컨텍스트 필터'아래의 '포맷'설정 (첫 번째 스크린 샷의 자주색)에서이를 무시하십시오.

기본적으로 [n] 그룹화에 대한 [n]보기를 작성하는 단점이 있습니다. 이는 그룹화 수에 따라 성능 문제가 될 수 있지만 조회를 표시하도록 설정된 수로 만 제한합니다. 사용 사례에 따라 성능이 향상 될 수 있습니다. 항상 그렇듯이 책임감있게 캐시하십시오.


그룹당 호출기를 재정의 할 수없는 것 같습니다. 그룹의 호출기에서 편집을 누르면 마스터 호출기 설정이 표시됩니다. 내가 빠진 것이 아니라면?
Nigel Waters

아, 맞아 그렇다면 완벽합니다. 한 번에 모든 항목을 제한 할 수 있습니다.
beth December

불행하게도 호출기는 표시된 그룹 수에도 영향을 미칩니다. 예를 들어 각각 3 개의 게시물이있는 3 개의 용어 만 표시되므로 원래 게시물이 오도 된 것으로 생각합니다. 한 페이지에 용어 당 3 개의 게시물이있는 10 개 이상의 용어를 표시해야합니다. 너무 가까이 :(
Nigel Waters

"표시 할 항목 재정의"에 대해 아무 것도하지 않았습니다. 이를 사용하여 표시 할 그룹 수를 결정하십시오. '0'을 입력하면 무한 그룹이 제공됩니다.
beth December

2

코드에서 이것을 제한하는 방법은 다음과 같은 것을 사용자 정의 모듈에 추가하는 것입니다.

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 와 같은 것을 사용하여 하나의 영역에 표시 하면 큰 쿼리가 실행되지 않습니다.

항상 그렇듯이 프로덕션 환경에서이 항목을 캐시하려고합니다.


2
내 성별에 대해 언급 할 필요는 없습니다. 상당히 손상됩니다. t.co/i1dKE8hQ t.co/ATfV3mBG은 어쨌든, Hook_views_pre_build()또는 hook_build_pre_execute()성능 저하를 줄여 이런 일에 사용할 수 있습니다,하지만 난 그 잘 알고로 아니에요. 아니면 당신은 이전에이 질문에 대한 나의 대답을 원할 것 입니다.
beth

업데이트 : 나는 "하나의 쿼리에서 각 그룹을 개별적으로 제한 할 수 없습니다. 렌더링 단계에서해야합니다. SQL은 슬프게도 할 수 없습니다."라는 좋은 권위 (Crell과 stevector)에 있습니다. 그들은 또한 "당신이 할 수있는 최선의 방법은 일련의 통합 쿼리"라고 말했지만 뷰도 그렇게 할 수 있다고 생각하지 않습니다.
beth

아, 난 당신을 OP로 착각했습니다. 어쨌든 Peek Summary 모듈은 자체 성능 문제를 나타내지 만이 경우 유용 할 수 있습니다. 그 제작자는 그것이 "거대한 종류이지만 시원하다"고 경고합니다.
beth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.