metatag_views.module in Metatag 8
Same filename and directory in other branches
Contains hook implementations for the metatag_views module.
File
metatag_views/metatag_views.moduleView source
<?php
/**
* @file
* Contains hook implementations for the metatag_views module.
*/
use Drupal\Core\Cache\Cache;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\metatag_views\MetatagViewsCacheWrapper;
use Drupal\metatag_views\Plugin\views\display_extender\MetatagDisplayExtender;
use Drupal\views\Plugin\views\cache\CachePluginBase;
use Drupal\views\ViewEntityInterface;
use Drupal\views\ViewExecutable;
use Drupal\views\Views;
/**
* Gets the meta tags of a specific view, if set.
*
* @param mixed $view
* The view id, view config entity or view executable.
* @param string $display_id
* The display id. If empty uses the preselected display if $view is a
* ViewExecutable, otherwise the default display.
*
* @return array|null
* The meta tags if set, null otherwise.
*/
function metatag_get_view_tags($view, $display_id = NULL, $args = []) {
if (empty($view)) {
return;
}
if ($view instanceof ViewEntityInterface) {
$view = $view
->getExecutable();
}
elseif (is_string($view)) {
$view = Views::getView($view);
}
if (!$view instanceof ViewExecutable) {
return;
}
$view
->setDisplay($display_id);
$view
->setArguments($args);
$view
->buildTitle();
// And get the list of extenders for this display.
$extenders = $view
->getDisplay()
->getExtenders();
if (!isset($extenders['metatag_display_extender'])) {
// If the id of the plugin is not in the list then something is wrong.
return;
}
// Retrieve the metatag settings from the extender.
return $extenders['metatag_display_extender']
->getMetatags();
}
/**
* Implements hook_metatags_alter().
*/
function metatag_views_metatags_alter(array &$metatags, array &$context) {
if (!$context['entity'] instanceof ViewEntityInterface) {
return;
}
$view = $context['entity']
->getExecutable();
// If display_id is not available, will default to Master display.
$route_match = \Drupal::routeMatch();
$display_id = $route_match
->getParameter('display_id');
$args = [];
$route = $route_match
->getRouteObject();
$map = $route
->hasOption('_view_argument_map') ? $route
->getOption('_view_argument_map') : [];
foreach ($map as $attribute => $parameter_name) {
if (isset($map[$attribute])) {
$attribute = $map[$attribute];
}
if (!($arg = $route_match
->getRawParameter($attribute))) {
$arg = $route_match
->getParameter($attribute);
}
if (isset($arg)) {
$args[] = $arg;
}
}
// Apply view overrides.
if ($tags = metatag_get_view_tags($view, $display_id, $args)) {
$metatags = array_merge($metatags, $tags);
}
}
/**
* Implements hook_metatag_route_entity().
*/
function metatag_views_metatag_route_entity(RouteMatchInterface $route_match) {
if ($view_id = $route_match
->getParameter('view_id')) {
$entity = \Drupal::entityTypeManager()
->getStorage('view')
->load($view_id);
return $entity;
}
}
/**
* Implements hook_views_post_render().
*/
function metatag_views_views_post_render(ViewExecutable $view, &$output, CachePluginBase $cache) {
if ($cache instanceof MetatagViewsCacheWrapper) {
$cache
->doDeferredCacheSet();
}
$extenders = $view
->getDisplay()
->getExtenders();
if (isset($extenders['metatag_display_extender'])) {
$first_row_tokens = MetatagDisplayExtender::getFirstRowTokensFromStylePlugin($view);
$extenders['metatag_display_extender']
->setFirstRowTokens($first_row_tokens);
}
}
Functions
Name | Description |
---|---|
metatag_get_view_tags | Gets the meta tags of a specific view, if set. |
metatag_views_metatags_alter | Implements hook_metatags_alter(). |
metatag_views_metatag_route_entity | Implements hook_metatag_route_entity(). |
metatag_views_views_post_render | Implements hook_views_post_render(). |