Я попытался определить новое переопределение крошки, но я все еще получаю сайт по умолчанию.
Я создал собственный модуль, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Вот это foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
Внутри у src/BreadcrumbBuild.php
меня есть:
<?php
namespace Drupal\foo_breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderBase;
class BreadcrumbBuild implements BreadcrumbManager {
/**
* {@inheritdoc}
*/
public function applies(array $attributes) {
return true;
}
/**
* {@inheritdoc}
*/
public function build(array $attributes) {
$breadcrumb[] = $this->l($this->t('Test'), NULL);
$breadcrumb[] = $this->l($this->t('Test2'), 'test');
return $breadcrumb;
}
}
?>
Я начал работать над единственной записью, которую я мог найти на хлебных крошках Drupal 8 , но дело в том, что она, похоже, использует более старую версию автозагрузки PSR-4, которой больше нет (для записи я на 8.0.0 -dev-beta3), и поэтому я понял, как работают все остальные модули в кодовой базе.
Теперь я совершенно уверен, что это правильно, чтобы заставить модуль загружаться; Однако я не уверен, если
class BreadcrumbBuild extends BreadcrumbBuilderBase
правильно. Проблема в том, что в старом учебнике, на который я ссылался, упоминаются ссылки BreadcrumbBuilderBase
, но более современные документы, похоже, не упоминают об этом, и мне интересно, устарел ли он - и как мне это сделать.
Кроме того, я не очень понимаю, что services.yml
файл делает в этом отношении, нет документации для этого нигде.
источник
Это снова мы. Эти ответы в основном правильные. Одна вещь, о которой вы не можете забыть, это «теги кеша» и «контексты кеша».
Я настраивал термин таксономии на узле как хлебная крошка.
Я работал с советами из этого поста, но потом я обошел все вокруг и заметил одинаковые хлебные крошки на каждой странице.
Короче говоря, не забудьте установить некоторые контексты и теги кеша.
Вот мой сервис в гисте: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Вот мой метод build ():
источник
Обновление 2016 Drupal 8
В документации говорится, что вы должны вернуть экземпляр класса breadcrumb. Если у вас возникли проблемы с тем, чтобы заставить его работать. вот решение, которое сработало для меня.
Тогда файл YML
PS: если вы используете загрузчик, перейдите на страницу
/admin/appearance/settings
настроек и посмотрите на настройки хлебных крошек.Show 'Home' breadcrumb link
должны быть проверены на. ИShow current page title at end
должно быть проверено.После того, как все это сделано, очистите ваш кеш. Каждый раз, когда вы меняете файл YML, даже в режиме отладки, вам необходимо очистить кэш. Вы можете пойти,
/core/rebuild.php
если вы застряли и не можете восстановить.источник
Не забывайте кэширование
Кэш рендеринга был изменен довольно поздно в цикле разработки D8, и поэтому он не упоминается ни в серии d8ftw, ни в других ответах на этот вопрос.
Документация Cache API специально относится к массивам рендеринга, но все эти инструкции в равной степени применимы к хлебным крошкам. У хлебных крошек есть
toRenderable()
метод, Drupal будет пытаться их кешировать в кеше рендеринга, а это значит, что вы должны указать достаточно информации, чтобы позволить Drupal делать это правильно.Подробности в документах, но короткая версия, которая
Breadcrumb
реализуетRefinableCachableDependencyInterface
. В вашем классе строителя вы захотите вызыватьaddCachableDependency()
все сущности или объекты конфигурации, которые используются для построения хлебных крошек. Документация для 'CacheableDependencyInterface & friends' содержит более подробную информацию о том, как и почему.Если есть другие контексты, в которых может измениться хлебная крошка, вам также нужно будет использовать вручную,
addCacheContexts()
чтобы убедиться, что блок меняется,addCacheTags()
чтобы убедиться, что запись в кэше может быть правильно признана недействительной, иmergeCacheMaxAge()
если кэш чувствителен ко времени и должен истекать.Если это не будет сделано должным образом, один из ваших пользовательских сервисов Breadcrumb «выиграет», и хлебные крошки для этой конкретной страницы будут предоставлены на каждой странице всем посетителям навсегда.
источник
Есть еще один способ добиться этого.
А затем создайте другой файл в папке шаблонов вашей темы с именем «breadcrumb.html.twig» и поместите ниже код в этот файл:
Это оно. Теперь очистите кеш, и вы получите крошку с заголовком текущей страницы, такой как Home / Current Page Title. Вы можете изменить разделитель, заменив "/" на нужный.
источник
Вы должны использовать модуль contrib, чтобы добавить заголовок текущей страницы в крошку, такой как Crumb текущей страницы: https://www.drupal.org/project/current_page_crumb
Если вы хотите написать код вручную, вы можете извлечь код из папки src этого модуля. Вы можете найти более подробную информацию о сухарях Drupal 8 здесь: http://www.gregboggs.com/drupal8-breadcrumbs/
источник
drush en current_page_crumb
не все так плохо.Я использовал Custom Breadcrumbs с использованием токена в Drupal 7, и когда этот модуль не был доступен для Drupal 8, я закончил тем, что создал представления для своих отдельных типов контента, используя поля, которые изначально были полями токена. Используя его как блок и отключив обычную хлебную крошку. Это было немного больше работы, чем Custom Breadcrumbs, но это работает.
источник