Template diversi in base al URL alias per D7

Cosa è cambiato da Drupal 6 a Drupal 7.

11 April, 2012

Questa mattina ho scoperto che Drupal 7 ha modificato il modo di gestire il nome dei template files. Tempo fa, in un progetto con Drupal 6, avevo modificato la funzione mytheme_preprocess_page(&$vars) presente nel file template.php per poter gestire template diversi su pagine differenti basandomi sul URL alias della pagina stessa.

Il codice per D6


  // Different page templates depending on URL aliases
  if (module_exists('path')) {
      $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
      if ($alias != $_GET['q']) {
        $template_filename = 'page';
        foreach (explode('/', $alias) as $path_part) {
          $template_filename = $template_filename . '-' . $path_part;
          $vars['template_files'][] = $template_filename;
        }
      }
  }

In Drupal 7 questo codice non funziona perché è stata modificata la variabile che gestisce il nome del template. Non è più $vars[‘template_files’], ma bensì $vars['theme_hook_suggestions’] e al posto del separatore -, viene utilizzato il doppio underscore __.

Il codice per D7


  // Different page templates depending on URL aliases
  if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $template_filename = 'page';
      foreach (explode('/', $alias) as $path_part) {
        $template_filename = $template_filename . '__' . $path_part;
        $vars['theme_hook_suggestions'][] = $template_filename;
      }
    }
  }


Dimenticavo il nome del template file ora dev'essere page–.tpl.php</code>.</p>