diff --git a/core/includes/theme.inc b/core/includes/theme.inc index 43f42b7..4d8e238 100644 --- a/core/includes/theme.inc +++ b/core/includes/theme.inc @@ -1677,6 +1677,8 @@ function theme_links($variables) { $num_links = count($links); $i = 0; + $active = \Drupal::linkGenerator()->getActive(); + foreach ($links as $key => $link) { $i++; @@ -1721,9 +1723,14 @@ function theme_links($variables) { if (!empty($link['language'])) { $variables['options']['language'] = $link['language']; } - if (\Drupal::linkGenerator()->isRouteActive($link['route_name'], $link['route_parameters'], $variables)) { + + if (($link['route_name'] == $active['route_name']) + // The language of an active link is equal to the current language. + && (empty($variables['options']['language']) || ($variables['options']['language']->id == $active['language'])) + && ($link['route_parameters'] == $active['parameters'])) { $class[] = 'active'; } + $item = drupal_render($link_element); } elseif (isset($link['href'])) { diff --git a/core/lib/Drupal/Core/Utility/LinkGenerator.php b/core/lib/Drupal/Core/Utility/LinkGenerator.php index d449d7c..318297a 100644 --- a/core/lib/Drupal/Core/Utility/LinkGenerator.php +++ b/core/lib/Drupal/Core/Utility/LinkGenerator.php @@ -85,6 +85,20 @@ public function setRequest(Request $request) { } /** + * Returns information for the currently active route. + * + * @return array + * An array of active route information, containing the following keys: + * - route_name: The currently active route_name + * - language: The current language + * - parameters: An array of request parameters and any query string + * parameters. + */ + public function getActive() { + return $this->active; + } + + /** * {@inheritdoc} */ public function generate($text, $route_name, array $parameters = array(), array $options = array()) {