it-swarm-eu.dev

Jak přepíšu výchozí šablonu pohledu z jiného modulu?

Drupal poskytuje hook_theme(). Existuje však hook_theme_alter ()? Hledám něco jako hook_menu_link_alter() , které přepíše položky nabídky zavěšení, ale pro motiv. Chci upravit položku motivu zavěšení pohledu, abych mohl určit, kde hledat jednu z mých vlastních šablon. Nemám zájem o jeho specifikaci prostřednictvím rozhraní Pohledy, protože hledá šablonu motivu ve složce motivů a chci svoji šablonu v modulu funkcí.

Našel jsem hook_theme_registry_alter() a _theme_process_registry() . Můžete odpovědět, který z nich je nejlepší použít a proč.

Který z těchto klíčů bych měl upravit, aby bylo možné šablonu vyzvednout z modulu?

Pokud do funkce vložím zobrazení-data-export-xml-header - richard-feeds-nokia-movies - zobrazení-data-export-1, ve výchozím nastavení Zobrazit se zobrazí pohledy-data-export-xml-header. tpl.php. Pokud tuto šablonu umístím do vrstvy motivu, pohled ji vyzvedne (i když je zavěšeno zavěšení registru).

6
amateur barista

Vaše funkce by měla implementovat hook_theme_registry_alter(). Případ použití, který popisujete, je přesně to, pro co je tento háček určen. Ukázkový kód propojený na stránce API by měl začít. Základní myšlenkou je cílit na položku, která odpovídá položce, kterou views_theme() vkládá do registru, a změnit šablonu tak, aby odpovídala té ve vaší funkci.

13
jhedstrom

Toto je kód, který používám k deklaraci šablony pohledu uložené ve složce template vlastního modulu.

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

Měli byste mít možnost snadno jej přepsat existujícím motivem namísto přidání nového. Doufám, že to někomu pomůže.

1
Sebastien M.