function content_translation_page_attachments in Drupal 8
Same name and namespace in other branches
- 9 core/modules/content_translation/content_translation.module \content_translation_page_attachments()
- 10 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 - Allows entities to be translated into different languages.
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);
}