diff options
-rw-r--r-- | includes/common.inc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/includes/common.inc b/includes/common.inc index c23ed64d5..c6686ee01 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -2370,6 +2370,8 @@ function _format_date_callback(array $matches = NULL, $new_langcode = NULL) { * alternative than url(). */ function url($path = NULL, array $options = array()) { + static $url_outbound; + // Merge in defaults. $options += array( 'fragment' => '', @@ -2392,7 +2394,14 @@ function url($path = NULL, array $options = array()) { $original_path = $path; // Allow other modules to alter the outbound URL and options. - drupal_alter('url_outbound', $path, $options, $original_path); + // Since PHP code cannot be unloaded, we statically cache the implementations + // of hook_url_outbound_alter() and only invoke them in case there are any. + if (!isset($url_outbound)) { + $url_outbound = (bool) module_implements('url_outbound_alter'); + } + if ($url_outbound) { + drupal_alter('url_outbound', $path, $options, $original_path); + } if ($options['fragment']) { $options['fragment'] = '#' . $options['fragment']; |