it-swarm-korea.com

다른 모듈에서 기본보기 템플릿을 재정의하려면 어떻게합니까?

Drupal은 hook_theme()을 제공합니다. 그러나 hook_theme_alter ()가 있습니까? hook_menu_link_alter() 같은 후크 메뉴 항목을 재정의하지만 테마를 찾고 있습니다. 뷰 후크 테마 항목을 수정하여 사용자 지정 템플릿 중 하나를 찾을 위치를 지정할 수 있습니다. 테마 폴더 내에서 테마 템플리트를 찾고 기능 모듈에서 템플리트를 원하기 때문에 Views 인터페이스를 통해 지정하는 데 관심이 없습니다.

hook_theme_registry_alter()_theme_process_registry() 을 찾았습니다. 어느 것이 가장 사용하기 쉬운 지, 왜 그런지 대답 할 수 있습니다.

뷰 픽업을 모듈에서 템플릿으로 만들려면이 키 중 어떤 키를 수정해야합니까?

이 기능에 views-data-export-xml-header--richard-feeds-nokia-movies--views-data-export-1을 넣으면 View는 기본적으로 views-data-export-xml-header를 선택합니다. tpl.php. 해당 템플릿을 테마 레이어에 넣으면 뷰가 선택됩니다 (레지스트리 변경 후크가있는 경우에도).

6
amateur barista

귀하의 기능은 hook_theme_registry_alter()을 구현해야합니다. 설명하는 사용 사례는 바로 그 후크의 목적입니다. API 페이지에 링크 된 예제 코드를 시작하십시오. 기본 아이디어는 views_theme()이 레지스트리에 삽입하는 항목에 해당하는 항목을 대상으로 지정하고 기능의 템플릿과 일치하도록 템플릿을 변경하는 것입니다.

13
jhedstrom

이것은 사용자 지정 모듈의 template 폴더에 저장된 뷰 템플릿을 선언하는 데 사용하는 코드입니다.

/**
 * Implements hook_theme_registry_alter().
 */
function custom_module_theme_registry_alter(&$theme_registry) {
  $extension   = '.tpl.php';
  $module_path = drupal_get_path('module', 'custom_module');
  $files       = file_scan_directory($module_path . '/templates', '/' . preg_quote($extension) . '$/');

  foreach ($files as $file) {
    $template = drupal_basename($file->filename, $extension);
    $theme    = str_replace('-', '_', $template);
    list($base_theme, $specific) = explode('__', $theme, 2);

    // Don't override base theme.
    if (!empty($specific) && isset($theme_registry[$base_theme])) {
      $theme_info = array(
        'template'   => $template,
        'path'       => drupal_dirname($file->uri),
        'variables'  => $theme_registry[$base_theme]['variables'],
        'base hook'  => $base_theme,
        // Other available value: theme_engine.
        'type'       => 'module',
        'theme path' => $module_path,
      );

      $theme_registry[$theme] = $theme_info;
    }
  }
}

새 테마를 추가하는 대신 기존 테마를 무시하여 쉽게 포크 할 수 있어야합니다. 그것이 누군가를 돕기를 바랍니다.

1
Sebastien M.