profile2와 같은 엔티티 유형을 기반으로 hook_preprocess 함수를 정의 할 수 있습니까?


8

나는 기능을 사용하여 가능한 후크를 살펴 보았고 hook_preprocess(&$vars, $hook)엔티티 만 사용할 수있었습니다. 같은 것을 할 수 있습니까 hook_preprocess_profile2_entity(), 아니면 엔터티 유형을 확인하기 위해 if 조건을 작성해야 hook_preprocess_entity()합니까?

답변:


15

이것은 노드 사전 프로세스 기능에 대한 Zen 테마 패턴을 엔티티에 적용합니다.

<?php

/**
 * Implements template_preprocess_entity().
 *
 * Runs a entity specific preprocess function, if it exists.
 */
function MYTHEME_preprocess_entity(&$variables, $hook) {
  $function = __FUNCTION__ . '_' . $variables['entity_type'];
  if (function_exists($function)) {
    $function($variables, $hook);
  }
}

/**
 * Profile2 specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_profile2(&$variables, $hook) {
}

/**
 * Field Collection specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_field_collection_item(&$variables, $hook) {
}

대단해. 나는 항상 PHP가 이런 일을 할 수 있다는 것을 잊어 버린다.
mpdonadio

부모 테마에서 상속하고 재정의하려면 hook_theme을 더 깊이 파고 들어야합니다. Zen의 hook_theme는 좋은 예입니다 (긴하지만).
Capi Etheriel

테마 레이어 외부에서 비슷한 것을 달성하는 방법을 누군가가 보여 주면 감사하겠습니다! 날
미치게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.