it-swarm-id.com

Bagaimana cara mengganti templat tampilan default dari modul lain?

Drupal menyediakan hook_theme(). Tetapi apakah ada hook_theme_alter ()? Saya mencari sesuatu seperti hook_menu_link_alter() , yang menimpa entri menu hook, tetapi untuk temanya. Saya ingin mengubah entri tema kait pengait sehingga saya dapat menentukan di mana harus mencari salah satu templat khusus saya. Saya tidak tertarik menentukannya melalui antarmuka Tampilan, karena mencari templat tema di dalam folder tema, dan saya ingin templat saya dalam modul fitur.

Saya menemukan hook_theme_registry_alter() dan _theme_process_registry() . Anda dapat menjawab mana yang terbaik untuk digunakan dan mengapa.

Manakah dari kunci ini yang harus saya modifikasi untuk membuat tampilan mengambil templat dari modul?

Jika saya memasukkan header view-data-export-xml-header - richard-feeds-nokia-movie - view-data-export-1 di fitur, view default untuk mengambil header view-data-export-xml-header. tpl.php. Jika saya meletakkan template itu di lapisan tema, tampilan mengambilnya (bahkan dengan kait penggantinya di tempat).

6
amateur barista

Fitur Anda harus menerapkan hook_theme_registry_alter(). Kasing yang Anda jelaskan persis untuk apa kaitan itu. Kode contoh yang ditautkan pada halaman API harus membantu Anda memulai. Ide dasarnya adalah untuk menargetkan entri yang sesuai dengan entri yang views_theme() dimasukkan ke dalam registri, dan ubah template agar sesuai dengan yang ada di fitur Anda.

13
jhedstrom

Ini adalah kode yang saya gunakan untuk mendeklarasikan templat tampilan yang disimpan dalam folder templat dari modul khusus.

/**
 * 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;
    }
  }
}

Anda seharusnya dapat dengan mudah memotongnya menggantikan tema yang sudah ada alih-alih menambahkan yang baru. Semoga ini bisa membantu seseorang.

1
Sebastien M.