it-swarm-ko.tech

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

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

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

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

20
enjoylife

권리. 모듈에서 뷰가있는 것을 "하기"위해서는 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을 설치/스위치 한 상태에서이 작업을 수행하는 것이 좋습니다.

편집 : 이것은 뷰 2와 Drupal 6을 가정합니다.) 당신이 선택한 무기가 아닌지 물어 보는 것이 가장 좋습니다.

22
NikLP

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

  • 캐시를 비 웁니다
  • 다운로드하여 Devel 을 활성화하십시오.
  • dpm() 대신 echo() 사용
  • dpm()으로 $view->name 테스트
4
Manu

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

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

해야한다

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

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

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
1
tan