Template diversi in base al URL alias per D7
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. Ecco qui di seguito 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" '__'. Riporto qui sotto il codice modificato:
// 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--<path_alias_part>.tpl.php.