xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавить в хлебные крошки заголовок текущей страницы

Опубликовано в

Так советует делать официальная документация:

/**
 * Preprocess function for breadcrumb.html.twig.
 */
function THEMENAME_preprocess_breadcrumb(&$variables) {
  if ($variables['breadcrumb']) {
    $request = \Drupal::request();
    $route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT);
    $page_title = \Drupal::service('title_resolver')->getTitle($request, $route);
    $variables['breadcrumb'][] = ['text' => $page_title];
    $variables['#cache']['contexts'][] = 'url';
  }
}

Минус в том, что из-за кэш-контекста url, блок с крошками будет генерироваться для каждой страницы сайта, тогда как по умолчанию он генерируется один раз для родительского раздела, а для дочерних страниц берётся из кэша. Поэтому вот более правильный вариант:

/**
 * Preprocess function for breadcrumb.html.twig.
 */
function THEMENAME_preprocess_breadcrumb(&$vars) {
  if ($vars['breadcrumb']) {
    $vars['breadcrumb'][] = [
      'text' => [
        '#lazy_builder' => ['THEMENAME_breadcrumb_page_title', []],
        '#create_placeholder' => TRUE,
      ]
    ];
  }
}
 
/**
 * Breadcrumb page title lazy builder.
 */
function THEMENAME_breadcrumb_page_title() {
  $request = \Drupal::request();
  $route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT);
  $page_title = \Drupal::service('title_resolver')->getTitle($request, $route);
  return ['#markup' => $page_title];
}
Написанное актуально для Drupal 8
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании