hook_page_alter와 preprocess_page의 차이점은 무엇입니까?


10

Drupal 7에서 hook_page_alter (& $ page) 또는 template_preprocess_page (& $ vars, $ hook)를 사용해야하는 시점을 완전히 이해하지 못합니다.

template.php에서 사용하기위한 모범 사례는 무엇입니까?

감사

답변:


16

차이점은 그들의 목적입니다.

hook_page_build ()hook_page_alter () 는 페이지 레벨에서 요소를 제거, 변경 또는 추가하는 데 사용됩니다.
전달 된 $ page 배열 hook_page_alter()에는 각 블록 영역의 최상위 요소 가 포함됩니다. 기본적으로 다음과 같습니다.

  • page_top
  • 헤더
  • sidebar_first
  • 함유량
  • sidebar_second
  • page_bottom

구현 예는 다음과 같습니다.

function mymodule_page_alter(&$page) {
  // Add help text to the user login block.
  $page['sidebar_first']['user_login']['help'] = array(
    '#weight' => -10, 
    '#markup' => t('To post comments or add new content, you first have to log in.'),
  );
}

템플릿 파일에 전달 된 변수를 변경하기 위해 사전 처리 함수가 호출됩니다. 페이지의 구조를 변경할 수는 없지만 페이지의 일부 요소의 내용을 변경하여 해당 변수의 내용을 변경할 수 있습니다.
예를 들어, 오버레이 모듈은 시각화중인 페이지가 오버레이 인 경우 기본 탭을 제거합니다.

function overlay_preprocess_page(&$variables) {
  if (overlay_get_mode() == 'child') {
    unset($variables['tabs']['#primary']);
  }
}

1
그러나 후크 preprocess_page를 사용하면 $ vars [ 'page'] 내부의 내용을 변경하여 페이지 구조를 변경할 수 있습니다. 노드 페이지에 hook_page_alter를 사용하여 어려움을 겪기 때문에이를 사용합니다.
gagarine

2
당신은 menu_get_object ()를 사용하여 노드 페이지 꾸벅 꾸벅 얻을 수 있습니다
andrewmacpherson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.