엔티티 전처리 함수를 정의하는 방법


10

내 사용자 지정 모듈은 EntityAPIController 클래스를 확장하는 사용자 지정 엔터티를 정의합니다. 기본적으로 작동하도록했습니다. 즉, 사용자 정의 tpl.php 파일을 통해 필드 등을 표시합니다. 그러나 tpl.php 파일에 사용자 정의 변수를 추가 하는 mymodule_preprocess_entity함수 ( 여기 제안 )를 만들고 싶습니다. 그러나 이러한 기능이 실행되고 있지 않습니다 (호출되지 않음).

또한이 엔티티를 표시 할 때 template_preprocess_entity(&$variables)entity.module 의 함수도 실행되지 않는 것으로 나타났습니다 .

호출되는 사용자 지정 엔터티에 대한 사전 프로세스 기능을 만들려면 무엇이 더 정의되어야합니까?


당신의 mymodule 사용-제안은 mytheme을 사용합니다
rémy

답변:


9

일반 mymodule_preprocess(&$variables, $hook)함수를 만들었고 특정 함수 이름이이어야 함을 보여주었습니다 mymodule_preprocess_myentity. myentity엔티티의 올바른 이름은 어디에 있습니까 ?

따라서이 코드는 저에게 효과적입니다.

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

보다 일반적인 접근법 :

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

불행히도 module_implements()활성 테마가 사전 프로세스 후크를 구현하는지 확인하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.