/** * Get the Url object that will link to the view for the given granularity and arguments. * * @todo Allow a View to link to other Views by itself for a certain granularity. * * @param \Drupal\views\ViewExecutable $view * @param $granularity * @param $arguments * * @return \Drupal\Core\Url|null */ static function getURLForGranularity(ViewExecutable $view, $granularity, $arguments) { $granularity_links = $view->getStyle()->options['granularity_links']; if ($granularity_links[$granularity]) { /** @var RouteProvider $router */ $router = \Drupal::getContainer()->get('router.route_provider'); $route_name = $granularity_links[$granularity]; // Check if route exists. $router->getRoutesByName will throw error if no match. $routes = $router->getRoutesByNames([$route_name]); if ($routes) { return Url::fromRoute($route_name, static::getViewRouteParameters($arguments)); } } if ($display_id = static::getDisplayForGranularity($view, $granularity)) { // @todo Handle arguments in different positions // @todo Handle query string parameters. return static::getViewsURL($view, $display_id, $arguments); } return NULL; }