diff --git a/src/MenuTrailByPathActiveTrail.php b/src/MenuTrailByPathActiveTrail.php index cd154d0..63c32c6 100644 --- a/src/MenuTrailByPathActiveTrail.php +++ b/src/MenuTrailByPathActiveTrail.php @@ -6,6 +6,7 @@ use Drupal\Core\Menu\MenuActiveTrail; use Drupal\Core\Menu\MenuLinkManagerInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Lock\LockBackendInterface; use Drupal\menu_trail_by_path\Menu\MenuHelperInterface; use Drupal\menu_trail_by_path\Path\PathHelperInterface; @@ -37,6 +38,11 @@ class MenuTrailByPathActiveTrail extends MenuActiveTrail { */ protected $languageManager; + /** + * @var \Drupal\Core\Entity\EntityRepositoryInterface + */ + protected $entityRepository; + /** * MenuTrailByPathActiveTrail constructor. * @param \Drupal\Core\Menu\MenuLinkManagerInterface $menu_link_manager @@ -48,12 +54,13 @@ class MenuTrailByPathActiveTrail extends MenuActiveTrail { * @param \Drupal\Core\Routing\RequestContext $context * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager */ - public function __construct(MenuLinkManagerInterface $menu_link_manager, RouteMatchInterface $route_match, CacheBackendInterface $cache, LockBackendInterface $lock, PathHelperInterface $path_helper, MenuHelperInterface $menu_helper, RequestContext $context, LanguageManagerInterface $languageManager) { + public function __construct(MenuLinkManagerInterface $menu_link_manager, RouteMatchInterface $route_match, CacheBackendInterface $cache, LockBackendInterface $lock, PathHelperInterface $path_helper, MenuHelperInterface $menu_helper, RequestContext $context, LanguageManagerInterface $languageManager, EntityRepositoryInterface $entityRepository) { parent::__construct($menu_link_manager, $route_match, $cache, $lock); - $this->pathHelper = $path_helper; - $this->menuHelper = $menu_helper; - $this->context = $context; - $this->languageManager = $languageManager; + $this->pathHelper = $path_helper; + $this->menuHelper = $menu_helper; + $this->context = $context; + $this->languageManager = $languageManager; + $this->entityRepository = $entityRepository; } /** @@ -98,6 +105,7 @@ class MenuTrailByPathActiveTrail extends MenuActiveTrail { * The menu link for the given menu, or NULL if there is no matching menu link. */ public function getActiveTrailLink($menu_name) { + $langcode = $this->languageManager->getCurrentLanguage()->getId(); $menu_links = $this->menuHelper->getMenuLinks($menu_name); $trail_urls = $this->pathHelper->getUrls(); @@ -106,6 +114,11 @@ class MenuTrailByPathActiveTrail extends MenuActiveTrail { /* @var $menu_link \Drupal\Core\Menu\MenuLinkInterface */ /* @var $trail_url \Drupal\Core\Url */ if ($menu_link->getUrlObject()->toString() == $trail_url->toString()) { + $uuid = $menu_link->getDerivativeId(); + $entity = $this->entityRepository->loadEntityByUuid('menu_link_content', $uuid); + if ($entity && !$entity->hasTranslation($langcode)) { + continue; + } return $menu_link; } } diff --git a/src/MenuTrailByPathServiceProvider.php b/src/MenuTrailByPathServiceProvider.php index bf8b835..0ed2c75 100644 --- a/src/MenuTrailByPathServiceProvider.php +++ b/src/MenuTrailByPathServiceProvider.php @@ -20,5 +20,6 @@ class MenuTrailByPathServiceProvider extends ServiceProviderBase { $definition->addArgument(new Reference('menu_trail_by_path.menu_helper')); $definition->addArgument(new Reference('router.request_context')); $definition->addArgument(new Reference('language_manager')); + $definition->addArgument(new Reference('entity.repository')); } }