function template_preprocess_book_navigation in Drupal 9
Same name and namespace in other branches
- 8 core/modules/book/book.module \template_preprocess_book_navigation()
- 6 modules/book/book.module \template_preprocess_book_navigation()
- 7 modules/book/book.module \template_preprocess_book_navigation()
Prepares variables for book navigation templates.
Default template: book-navigation.html.twig.
Parameters
array $variables: An associative array containing the following key:
- book_link: An associative array of book link properties. Properties used: bid, link_title, depth, pid, nid.
File
- core/
modules/ book/ book.module, line 389 - Allows users to create and organize related content in an outline.
Code
function template_preprocess_book_navigation(&$variables) {
$book_link = $variables['book_link'];
// Provide extra variables for themers. Not needed by default.
$variables['book_id'] = $book_link['bid'];
$variables['book_title'] = $book_link['link_title'];
$variables['book_url'] = Url::fromRoute('entity.node.canonical', [
'node' => $book_link['bid'],
])
->toString();
$variables['current_depth'] = $book_link['depth'];
$variables['tree'] = '';
/** @var \Drupal\book\BookOutline $book_outline */
$book_outline = \Drupal::service('book.outline');
if ($book_link['nid']) {
$variables['tree'] = $book_outline
->childrenLinks($book_link);
$build = [];
if ($prev = $book_outline
->prevLink($book_link)) {
$prev_href = Url::fromRoute('entity.node.canonical', [
'node' => $prev['nid'],
])
->toString();
$build['#attached']['html_head_link'][][] = [
'rel' => 'prev',
'href' => $prev_href,
];
$variables['prev_url'] = $prev_href;
$variables['prev_title'] = $prev['title'];
}
/** @var \Drupal\book\BookManagerInterface $book_manager */
$book_manager = \Drupal::service('book.manager');
if ($book_link['pid'] && ($parent = $book_manager
->loadBookLink($book_link['pid']))) {
$parent_href = Url::fromRoute('entity.node.canonical', [
'node' => $book_link['pid'],
])
->toString();
$build['#attached']['html_head_link'][][] = [
'rel' => 'up',
'href' => $parent_href,
];
$variables['parent_url'] = $parent_href;
$variables['parent_title'] = $parent['title'];
}
if ($next = $book_outline
->nextLink($book_link)) {
$next_href = Url::fromRoute('entity.node.canonical', [
'node' => $next['nid'],
])
->toString();
$build['#attached']['html_head_link'][][] = [
'rel' => 'next',
'href' => $next_href,
];
$variables['next_url'] = $next_href;
$variables['next_title'] = $next['title'];
}
}
if (!empty($build)) {
\Drupal::service('renderer')
->render($build);
}
$variables['has_links'] = FALSE;
// Link variables to filter for values and set state of the flag variable.
$links = [
'prev_url',
'prev_title',
'parent_url',
'parent_title',
'next_url',
'next_title',
];
foreach ($links as $link) {
if (isset($variables[$link])) {
// Flag when there is a value.
$variables['has_links'] = TRUE;
}
else {
// Set empty to prevent notices.
$variables[$link] = '';
}
}
}