From 589e9f237fbf27698e377e3be08599b3b322148c Mon Sep 17 00:00:00 2001 From: Neil Drumm <drumm@3064.no-reply.drupal.org> Date: Thu, 27 Jul 2006 08:01:58 +0000 Subject: [PATCH] #65706 by Eaton, look for page templates based upon the path. --- CHANGELOG.txt | 3 ++ themes/engines/phptemplate/phptemplate.engine | 52 ++++++++++++++----- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 560cd9a7182d..9c9400edf147 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -29,6 +29,9 @@ Drupal x.x.x, xxxx-xx-xx (development version) * 'blogapi new' and 'blogapi edit' nodeapi operations. - user module: * added hook_profile_alter(). +- PHP Template engine: + * add the ability to look for a series of suggested templates. + * look for page templates based upon the path. Drupal 4.7.0, 2006-05-01 ------------------------ diff --git a/themes/engines/phptemplate/phptemplate.engine b/themes/engines/phptemplate/phptemplate.engine index e081cd477de8..7dc1254ea4eb 100644 --- a/themes/engines/phptemplate/phptemplate.engine +++ b/themes/engines/phptemplate/phptemplate.engine @@ -46,12 +46,13 @@ function phptemplate_regions() { * The name of the theme function being executed. * @param $variables * A sequential array of variables passed to the theme function. - * @param $file - * A suggested template file to use. If the file is not found, the default $hook.tpl.php will be used. + * @param $suggestions + * An array of suggested template files to use. If none of the files are found, the + * default $hook.tpl.php will be used. * @return * The HTML generated by the template system. */ -function _phptemplate_callback($hook, $variables = array(), $file = NULL) { +function _phptemplate_callback($hook, $variables = array(), $suggestions = array()) { global $theme_engine; $variables = array_merge($variables, _phptemplate_default_variables($hook, $variables)); @@ -62,17 +63,21 @@ function _phptemplate_callback($hook, $variables = array(), $file = NULL) { $variables = array_merge($variables, call_user_func($variables_function, $hook, $variables)); } + if (is_array($variables['template_files'])) { + $suggestions = array_merge($suggestions, $variables['template_files']); + } + if (isset($variables['template_file'])) { - $file = $variables['template_file']; + $suggestions[] = $variables['template_file']; } $hook_function = '_'. $theme_engine .'_'. $hook; $default_function = '_'. $theme_engine .'_default'; if (function_exists($hook_function)) { - return call_user_func($hook_function, $variables, $file); + return call_user_func($hook_function, $variables, $suggestions); } elseif (function_exists($default_function)) { - return call_user_func($default_function, $hook, $variables, $file); + return call_user_func($default_function, $hook, $variables, $suggestions); } } @@ -214,7 +219,20 @@ function phptemplate_page($content) { $variables['node'] = node_load(arg(1)); } - return _phptemplate_callback('page', $variables); + $i = 0; + $suggestion = 'page'; + $suggestions = array($suggestion); + while ($arg = arg($i++)) { + $suggestions[] = $suggestion . '-' . $arg; + if (!is_numeric($arg)) { + $suggestion .= '-' . $arg; + } + } + if (drupal_is_front_page()) { + $suggestions[] = 'page-front'; + } + + return _phptemplate_callback('page', $variables, $suggestions); } /* @@ -256,7 +274,7 @@ function phptemplate_node($node, $teaser = 0, $page = 0) { $variables['picture'] = ''; } - return _phptemplate_callback('node', $variables, 'node-' . $node->type); + return _phptemplate_callback('node', $variables, array('node-' . $node->type)); } /** @@ -311,16 +329,22 @@ function phptemplate_box($title, $content, $region = 'main') { * The name of the theme function being executed. * @param $variables * A sequential array of variables passed to the theme function. - * @param $file - * A suggested template file to use. + * @param $suggestions + * An array of suggested template files to use. */ -function _phptemplate_default($hook, $variables, $file = NULL, $extension = '.tpl.php') { +function _phptemplate_default($hook, $variables, $suggestions = array(), $extension = '.tpl.php') { global $theme_engine; - if (!empty($file) && file_exists(path_to_theme() ."/$file$extension")) { - $file = path_to_theme() ."/$file$extension"; + // Loop through any suggestions in FIFO order. + $suggestions = array_reverse($suggestions); + foreach ($suggestions as $suggestion) { + if (!empty($suggestion) && file_exists(path_to_theme() .'/'. $suggestion . $extension)) { + $file = path_to_theme() .'/'. $suggestion . $extension; + break; + } } - else { + + if (!isset($file)) { if (file_exists(path_to_theme() ."/$hook$extension")) { $file = path_to_theme() ."/$hook$extension"; } -- GitLab