Skip to content
Snippets Groups Projects

Updated addMissingCurrentPage to work with changes from...

Files
2
@@ -27,6 +27,7 @@ use Drupal\menu_link_content\Plugin\Menu\MenuLinkContent;
use Drupal\node\NodeInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface;
/**
* {@inheritdoc}
@@ -139,6 +140,13 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface {
*/
private $contentLanguage;
/**
* The router.
*
* @var \Symfony\Component\Routing\RouterInterface
*/
protected $router;
/**
* {@inheritdoc}
*/
@@ -153,6 +161,7 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface {
EntityTypeManagerInterface $entity_type_manager,
CacheBackendInterface $cache_menu,
LockBackendInterface $lock,
RouterInterface $router
) {
$this->configFactory = $config_factory;
$this->menuActiveTrail = $menu_active_trail;
@@ -164,6 +173,7 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface {
$this->entityTypeManager = $entity_type_manager;
$this->cacheMenu = $cache_menu;
$this->lock = $lock;
$this->router = $router;
$this->config = $this->configFactory->get('menu_breadcrumb.settings');
}
@@ -412,12 +422,25 @@ class MenuBasedBreadcrumbBuilder implements BreadcrumbBuilderInterface {
// Check if the current page is already present.
if (!empty($links)) {
$last_url = end($links)->getUrl();
if ($last_url->isRouted() &&
$last_url->getRouteName() === $route_match->getRouteName() &&
$last_url->getRouteParameters() === $route_match->getRawParameters()->all()
) {
// We already have a link, so no need to add one.
return;
if ($last_url->isRouted()) {
// Sort parameters for views with contextual filters.
$parameters = $last_url->getRouteParameters();
$raw_parameters = $route_match->getRawParameters()->all();
$result = $this->router->match($last_url->toString());
foreach ($result['_route_object']->getDefaults() as $name => $value) {
if (!isset($raw_variables[$name]) && substr($name, 0, 1) !== '_' && isset($raw_parameters[$name]) && $raw_parameters[$name] === $value) {
unset($raw_parameters[$name]);
}
}
sort($parameters);
sort($raw_parameters);
if ($last_url->getRouteName() === $route_match->getRouteName() &&
$parameters === $raw_parameters) {
// We already have a link, so no need to add one.
return;
}
}
}
Loading