it-swarm-ko.tech

hook_theme_registry_alter () 및 테마 ()

hook_theme_registry_alter()은 (는) 예를 들어 theme_mymodule_image_output()을 'image'테마 ID와 어떻게 연관시킬 수 있습니까?

3
enjoylife

설명서에서보고 된 것처럼 hook_theme_registry_alter () 는 Drupal에서 호출되어 타사 모듈이 hook_theme ()에서 반환 된 테마 레지스트리 정보를 변경할 수 있도록 함)에서 호출됩니다. .

hook_theme() 구현에서 리턴 된 값은 모듈 (또는 테마)에 의해 구현 된 다른 테마 함수에 대한 정보를 포함하는 배열입니다.

function node_theme() {
  return array(
    'node' => array(
      'arguments' => array('node' => NULL, 'teaser' => FALSE, 'page' => FALSE), 
      'template' => 'node',
    ), 
    'node_list' => array(
      'arguments' => array('items' => NULL, 'title' => NULL),
    ), 
    'node_search_admin' => array(
      'arguments' => array('form' => NULL),
    ), 
    'node_filter_form' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_filters' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_admin_nodes' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.admin.inc',
    ), 
    'node_add_list' => array(
      'arguments' => array('content' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_form' => array(
      'arguments' => array('form' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_preview' => array(
      'arguments' => array('node' => NULL), 
      'file' => 'node.pages.inc',
    ), 
    'node_log_message' => array(
      'arguments' => array('log' => NULL),
    ), 
    'node_submitted' => array(
      'arguments' => array('node' => NULL),
    ),
  );
}

반환 된 배열은 이전 주석에서 테마 ID라는 것을 사용했으며 theme ()에 전달 된 것과 동일한 값입니다.
node_theme () 사용하지 않지만 hook_theme() 설명서는 배열이 function 인덱스를 사용하여 어떤 함수를보고 할 수 있는지보고합니다 테마 함수로 호출해야합니다.

hook_theme_registry_alter()을 구현하는 모듈은 다음 코드를 사용하여 theme('image')이 호출 될 때 호출되는 함수를 변경해야합니다.

function mymodule_theme_registry_alter(&$theme_registry) {
  if (isset($theme_registry['image'])) {
    $theme_registry['image']['function'] = 'theme_mymodule_image_output';
  }
}

모듈이 해당 코드를 사용하여 테마 레지스트리를 변경하면 theme('image', ...)에 대한 호출은 더 이상 theme_image () 을 호출하지 않지만 해당 모듈에서 정의 된 함수를 호출합니다.
함수 이름을 지정할 필요가 없습니다. theme_mymodule_image_output(); 함수 이름이 mymodule_image_output()로 바뀌고 mymodule_theme_registry_alter()의 코드가 변경되면 코드는 동일하게 작동합니다. 필자는 일반적으로 접두사 theme_를 사용하여 함수가 테마 함수임을 분명히합니다.

5
kiamlaluno