hook_views_query_alter ()를 어떻게 사용합니까?


20

hook_views_query_alter () 문서에서보고 된 내용에 따라 라는 파일을 작성하여이라는 alterform.views.inc활성화 된 모듈에 넣었습니다 alterform. .에 다음 코드를 추가했지만 alterform.views.inc작동하지 않습니다.

function alterform_views_query_alter(&$view, &$query) {
  switch($view->name) {
    case 'myViewName':  
      echo 'test test'; // test       
      $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
      $query->orderby[1] = "node_title ASC";
      break;
  }
}

왜 "테스트 테스트"가 출력되지 않습니까? 내 코드에 어떤 문제가 있습니까?

여전히 테스트 및 뷰의 출력이 없습니다. 내 코드에 어떤 문제가 있습니까? 고맙습니다


절대로 사용 alterform.views.inc하지는 않았지만 모듈 내부에 포함 / 요구해야하는데 그렇게하지 않았습니까?
nonsenz 8:19에

난 내 alterform 모듈 파일에 alterform.views.inc을 뒀다
enjoylife

모듈 안에 alterform.views.inc를 포함 / 요구하는 방법은 무엇입니까? 감사합니다
enjoylife

답변:


22

권리. 모듈에서 뷰를 가진 모든 것을 "하기"위해서는 hook_views_api를 구현해야합니다. 이 기능이 없으면 모듈이 뷰에서 전혀 인식되지 않습니다 (AFAIK).

모듈 코드에 다음을 추가하십시오 :

/**
 * Implementation of hook_views_api().
 */
function alterform_views_api() { // your module name into hook_views_api
  return array(
    'api' => 2,
    // might not need the line below, but in any case, the last arg is the name of your module
    'path' => drupal_get_path('module', 'alterform'),
  );
}

이것은 모듈이 최소한 인식되도록 수정해야하며 디버깅을 시작할 수 있습니다 :)

뷰 디버깅을 시작하는 좋은 방법 dpm($view);은 구현중인 뷰 기능의 시작 부분 에 바로 들어가는 것입니다. 대부분의 경우 화면에 정보를 덤프하여 현재 위치를 확인할 수 있습니다. devel.module을 설치 / 스위치 한 상태에서이 작업을 수행하는 것이 좋습니다.

편집 : 이것은 Views 2와 Drupal 6을 가정합니다. 자신이 선택한 무기가 아닌지 묻는 것이 가장 좋습니다.


이것은 잘 작동합니다 :)
kalidasan

4

3 가지를 테스트 할 수 있습니다.

  • 캐시를 비 웁니다
  • 다운로드 가능 (STABLE)을 ,
  • dpm()대신에 사용echo()
  • 테스트 $view->namedpm()

캐시를 지우고 $ view-> name을 반향하십시오. 그러나 views 블록에는 여전히 뷰 이름에 대한 출력이 없습니다.
enjoylife

기묘한. 나는 보통 반향에 의존하지 않는다 ... 코드에 약간의 오류가 있음을 알았을 때 "}"가 붙여 넣기 오류가 아니어야합니까?
마누

그러나 내가 print_r ($ views) 할 때 여전히 views 블록에 tit에 대한 출력이 없습니다.
enjoylife

print_r ($ views)는 print_r ($ view) 이외의 다른 것을 인쇄해서는 안됩니다. 이것을 스위치 앞에 두었습니까?
마누

3

yourmodule.views.inc 파일을 서브 디렉토리가 아닌 모듈 디렉토리에 두어야합니다. 그렇지 않으면보기가 자동으로 파일을 선택할 수 없습니다.


2
    $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";

해야한다

    $query->orderby[0]['field'] = "field_name ASC";

1

yourmodule.views.inc에 디렉토리를 사용하는 경우 다음과 유사한 코드를 사용하여 모듈 파일에서 해당 경로를 언급해야합니다.

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.