4 * Contains hook implementations for the metatag_views module.
7 use Drupal\Core\Routing\RouteMatchInterface;
8 use Drupal\views\ViewEntityInterface;
9 use Drupal\views\ViewExecutable;
10 use Drupal\views\Views;
13 * Gets the metatags of a specific view, if set.
16 * The view id, view config entity or view executable.
17 * @param string $display
18 * The display id. If empty uses the preselected display if $view is a
19 * ViewExecutable, otherwise the default display.
22 * The metatags if set, null otherwise.
24 function metatag_get_view_tags($view, $display_id = NULL) {
28 if ($view instanceof ViewEntityInterface) {
29 $view = $view->getExecutable();
31 elseif (is_string($view)) {
32 $view = Views::getView($view);
34 if (!$view instanceof ViewExecutable) {
37 $view->setDisplay($display_id);
39 // And get the list of extenders for this display.
40 $extenders = $view->getDisplay()->getExtenders();
41 if (!isset($extenders['metatag_display_extender'])) {
42 // If the id of the plugin is not in the list then something is wrong.
46 // Retrieve the metatag settings from the extender.
47 return $extenders['metatag_display_extender']->getMetatags();
51 * Implements hook_metatags_alter().
53 function metatag_views_metatags_alter(&$metatags, $context) {
54 if (!$context['entity'] instanceof ViewEntityInterface) {
58 $view = $context['entity']->getExecutable();
59 // If display_id is not available, will default to Master display.
60 $display_id = \Drupal::routeMatch()->getParameter('display_id');
61 if ($tags = metatag_get_view_tags($view, $display_id)) {
62 // Apply view overrides.
63 $metatags = array_merge($metatags, $tags);
68 * Implements hook_metatag_route_entity().
70 function metatag_views_metatag_route_entity(RouteMatchInterface $route_match) {
71 if ($view_id = $route_match->getParameter('view_id')) {
72 $entity = \Drupal::entityTypeManager()->getStorage('view')->load($view_id);