it-swarm-ko.tech

결과가 N보다 작 으면 뷰 숨기기

X 결과보다 작은 경우 뷰를 블록 뷰로 숨길 수 있는지 궁금합니다.

6
Disco

뷰 훅을 배우려면 약간의 시간이 걸립니다. 뷰 템플릿 파일에 대해 알고 있습니까? 그렇게하는 가장 빠르고 더러운 방법은 최상위 레벨보기 템플리트 파일에 표시되는 행 수를 확인하는 것입니다. Devel 모듈이 설치되어 있으면 views-view.tpl.php에서 dpm($variables)을 사용할 수 있습니다 (아마도보기에 고유 한 디스플레이 출력을 사용하고 싶을 것입니다).
어딘지 모르지만 $variables의 어딘가가 행 수입니다. $rows가 기준에 맞지 않으면 템플릿 파일에 로직을 추가하여 인쇄하지 않을 수 있습니다.

1
Jepedo

템플리트 전처리 기능에서보기에있는 결과 수 (행)를 쉽게 감지하고 출력 인 경우 빈 문자열로 출력을 설정할 수 있습니다.

이 기능을 사용하려면 뷰에서 비어있는 경우 원하지 않는 일부 줄 바꿈 HTML이 뷰에 항상 추가되므로 템플릿에서 약간의 작업을 수행해야 할 수도 있습니다.

template_preprocess_views_view () 전처리 함수에서 가장 쉬운 방법 일 것입니다. 뷰 인터페이스를 참조하여 템플릿에 대한 힌트를 얻을 수 있습니다.

8
googletorp

Googletorp가 제공 한 힌트를 기반으로 간단한 해결책은 이것을 template.php에 넣는 것입니다.

function MY_THEME_NAME_preprocess_views_view(&$vars) {
  if ($vars['display_id'] == 'MY_DISPLAY_ID' && count($vars['view']->result) < 2) {
    $vars['view']->result = NULL;
  }
}

이 경우 결과가 두 개 미만인 경우 뷰를 숨기고 있습니다.

고마워요!

8
yan

이것에 대한 이유가 주로 디스플레이 지향적 인 경우 (예 : 그리드를 작성하고 짝수/홀수 개의 항목을 강요하려는 경우) 테마 레이어에 사용자 정의 논리를 추가하는 것이 가장 논리적이라고 가정합니다. 다른 답변은 내가 생각한 것을 다루었습니다. 그러나 발견 된 문제는 일부보기 변수를 변경해야 할 수도 있다는 것입니다 (예 : $view->result = NULL), 전처리 기능의 일부로 안전하게 변경할 수 없습니다. 뷰 내부 캐싱은 "렌더링 된 출력"및 "쿼리 결과"캐시 설정의 일부 조합이 기존 솔루션과 호환되지 않는 방식으로 일부 변수를 생성 할 수 있습니다.

한 가지 대안은 실행 된 쿼리 자체의 결과를 변경하여 훨씬 낮은 수준에서 제어를 제공하는 것입니다. 또한 마크 업을 빌드하기 전에 "빈"결과 집합을 시뮬레이션 할 때 래퍼 마크 업 숨기기와 관련된 일부 문제를 해결할 수도 있습니다.

/**
 * Implements hook_views_post_execute().
 */
function MYMODULE_views_post_execute(&$view) {
  $view_name = 'myviewname';
  $view_display = 'mydisplay';
  // Don't show the view if there is only one item.
  if ($view->name == $view_name && $view->current_display == $view_display && count($view->result) < 2) {
    $view->result = array();
  }
}

물론 테마 또는 변경 후크와 관련이 없으므로 테마에서 구현할 수 없지만 여전히이 질문에 관심이있는 사람들에게는 주목할 가치가 있다고 생각합니다.

1
rjacobs

테마 템플릿을 사용하여이 작업을 수행 할 수도 있습니다.

  • views-view.php를 테마/템플릿 디렉토리에 복사하십시오.
  • 해당 파일의 사본을 만들고 이름을 views-view--view-name--display-name.tpl.php
  • (선택하고 재정의 할 파일 이름에 대한 자세한 내용은 고급> 기타> 테마 : 정보를 참조하십시오. 필요에 따라 다소 구체적인 정보를 얻을 수 있습니다)
  • if (count($rows) < $n):을 코드에 추가하여 필요에 따라 결과 수에 따라 조작하십시오.
0
squarecandy

경우에 따라 이러한 종류의 조건을 뷰에 넣는 것이 더 좋으므로 빌더는 다른 모듈 또는 테마 후크가 아닌 편집 뷰 컨텍스트 내에서 발생하는 상황을 이해합니다.

이 로직을보기 편집 페이지에 포함 시키려면 다음을 수행하십시오.

  1. 글로벌 텍스트/HTML 바닥 글 필드를 추가하고 텍스트 형식을 PHP Code
  2. 이 필드의 관리자 이름을 매우 명확한 것으로 설정하십시오 (예 : '결과가 5 개 미만인 경우이보기를 숨기십시오'. 그러면 향후 사이트 빌더가 혼동되지 않습니다 (내보기가 사라지는 이유는 무엇입니까?! ??)
  3. 아래의 PHP 코드를 필요에 맞게 수정하고 현장에서 사용하십시오 :
<?php
$view = views_get_current_view();
if ( count($view->result) < 5 ) {
    $view->result = null;
}
?>
0
RogerRoger