function content_translation_page_attachments

Same name and namespace in other branches
  1. 10 core/modules/content_translation/content_translation.module \content_translation_page_attachments()
  2. 9 core/modules/content_translation/content_translation.module \content_translation_page_attachments()

Implements hook_page_attachments().

File

core/modules/content_translation/content_translation.module, line 659

Code

function content_translation_page_attachments(&$page) {
  $cache = CacheableMetadata::createFromRenderArray($page);
  $route_match = \Drupal::routeMatch();
  // If the current route has no parameters, return.
  if (!($route = $route_match->getRouteObject()) || !$parameters = $route->getOption('parameters')) {
    return;
  }
  // Determine if the current route represents an entity.
  foreach ($parameters as $name => $options) {
    if (!isset($options['type']) || strpos($options['type'], 'entity:') !== 0) {
      continue;
    }
    $entity = $route_match->getParameter($name);
    if ($entity instanceof ContentEntityInterface && $entity->hasLinkTemplate('canonical')) {
      // Current route represents a content entity. Build hreflang links.
      foreach ($entity->getTranslationLanguages() as $language) {
        // Skip any translation that cannot be viewed.
        $translation = $entity->getTranslation($language->getId());
        $access = $translation->access('view', NULL, TRUE);
        $cache->addCacheableDependency($access);
        if (!$access->isAllowed()) {
          continue;
        }
        $url = $entity->toUrl('canonical')
          ->setOption('language', $language)
          ->setAbsolute()
          ->toString();
        $page['#attached']['html_head_link'][] = [
          [
            'rel' => 'alternate',
            'hreflang' => $language->getId(),
            'href' => $url,
          ],
          TRUE,
        ];
      }
    }
    // Since entity was found, no need to iterate further.
    break;

  }
  // Apply updated caching information.
  $cache->applyTo($page);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.