diff options
-rw-r--r-- | includes/path.inc | 38 | ||||
-rw-r--r-- | themes/garland/page.tpl.php | 4 |
2 files changed, 24 insertions, 18 deletions
diff --git a/includes/path.inc b/includes/path.inc index bc11198b4..75a869d48 100644 --- a/includes/path.inc +++ b/includes/path.inc @@ -24,7 +24,8 @@ function drupal_init_path() { /** * Given an alias, return its Drupal system URL if one exists. Given a Drupal - * system URL return its alias if one exists. + * system URL return one of its aliases if such a one exists. Otherwise, + * return FALSE. * * @param $action * One of the following values: @@ -39,39 +40,44 @@ function drupal_init_path() { * found. */ function drupal_lookup_path($action, $path = '') { - static $map = array(); + // $map keys are Drupal paths and the values are the corresponding aliases + static $map = array(), $no_src = array(); static $count = NULL; + // Use $count to avoid looking up paths in subsequent calls if there simply are no aliases if ($count === NULL) { $count = db_result(db_query('SELECT COUNT(pid) FROM {url_alias}')); } if ($action == 'wipe') { $map = array(); + $no_src = array(); } elseif ($count > 0 && $path != '') { if ($action == 'alias') { - if (isset($map[$path])) { + if (isset($map[$path]) || array_key_exists($path, $map)) { return $map[$path]; } - if ($alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s'", $path))) { - $map[$path] = $alias; - return $alias; - } - else { - $map[$path] = $path; - } + $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s'", $path)); + $map[$path] = $alias; + return $alias; } - elseif ($action == 'source') { - if ($alias = array_search($path, $map)) { - return $alias; - } - if (!isset($map[$path])) { + // Check $no_src for this $path in case we've already determined that there + // isn't a path that has this alias + elseif ($action == 'source' && !isset($no_src[$path])) { + // Look for the value $path within the cached $map + if (!$src = array_search($path, $map)) { if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s'", $path))) { $map[$src] = $path; - return $src; + } + else { + // We can't record anything into $map because we do not have a valid + // index and there is no need because we have not learned anything + // about any Drupal path. Thus cache to $no_src. + $no_src[$path] = TRUE; } } + return $src; } } diff --git a/themes/garland/page.tpl.php b/themes/garland/page.tpl.php index df2c95e31..50c3c0e4f 100644 --- a/themes/garland/page.tpl.php +++ b/themes/garland/page.tpl.php @@ -67,7 +67,7 @@ <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?> <?php if ($tabs): print $tabs .'</div>'; endif; ?> - <?php if ($tabs2): print $tabs2; endif; ?> + <?php if (isset($tabs2)): print $tabs2; endif; ?> <?php if ($help): print $help; endif; ?> <?php if ($messages): print $messages; endif; ?> @@ -89,4 +89,4 @@ <?php print $closure ?> </body> -</html>
\ No newline at end of file +</html> |