Próbowałem zdefiniować nowy sposób zastępowania okruszków, ale nadal dostaję domyślną stronę.
Utworzyłem niestandardowy moduł, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Oto foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
W środku src/BreadcrumbBuild.php
mam:
<?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;
}
}
?>
Zacząłem pracować nad jedynym opisem, jaki mogłem znaleźć na bułce tartej Drupal 8 , ale wydaje się, że używa starszej wersji automatycznego ładowania PSR-4, która nie jest już na miejscu (dla rekordu jestem w wersji 8.0.0 -dev-beta3), więc sprawdziłem, jak działają wszystkie pozostałe moduły w bazie kodu.
Teraz jestem całkiem pewien, że to poprawne, aby moduł się załadował; jednak nie jestem pewien, czy
class BreadcrumbBuild extends BreadcrumbBuilderBase
jest poprawne. Problem polega na tym, że stary samouczek, do którego nawiązałem, wzmiankuje BreadcrumbBuilderBase
, ale bardziej aktualne dokumenty nie wydają się o nim wspominać i zastanawiam się, czy jest nieaktualny - i jak powinienem to zrobić.
Podobnie, tak naprawdę nie rozumiem, co services.yml
robi plik w tym zakresie, nigdzie nie ma na to dokumentacji.
źródło
Znowu zaczynamy. Te odpowiedzi są w większości prawidłowe. Jedną z rzeczy, o których nie można zapomnieć, są „tagi pamięci podręcznej” i „konteksty pamięci podręcznej”.
Ustawiałem termin taksonomii na węźle jako bułkę tartą.
Pracowałem z radami tego postu, ale potem kliknąłem i zauważyłem te same bułki tarte na każdej stronie.
Krótko mówiąc, pamiętaj o ustawieniu kontekstów i tagów pamięci podręcznej.
Oto moja usługa w skrócie: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Oto moja metoda build ():
źródło
Aktualizacja 2016 Drupal 8
Dokumentacja stanowi, że musisz zwrócić instancję klasy breadcrumb. Jeśli masz problemy z uruchomieniem go. oto rozwiązanie, które zadziałało dla mnie.
Następnie plik yml
PS: jeśli używasz bootstrap, przejdź do
/admin/appearance/settings
strony ustawień i sprawdź ustawienia bułki tartej.Show 'Home' breadcrumb link
należy sprawdzić. IShow current page title at end
należy to sprawdzić.Po tym wszystkim wyczyść pamięć podręczną. Za każdym razem, gdy zmieniasz plik YML, nawet w trybie debugowania, musisz wyczyścić pamięć podręczną. możesz przejść,
/core/rebuild.php
jeśli utkniesz i nie możesz odbudować.źródło
Nie zapomnij o buforowaniu
Pamięć podręczna renderowania została zmieniona dość późno w cyklu rozwoju D8, dlatego nie jest wspomniana w serii d8ftw ani w innych odpowiedziach na to pytanie.
Dokumentacja API pamięci podręcznej odnosi się konkretnie do renderowania tablic, ale wszystkie te instrukcje dotyczą jednakowo bułki tartej. Bułka tarta ma
toRenderable()
metodę, Drupal będzie próbował buforować je w pamięci podręcznej renderowania, a to oznacza, że musisz podać wystarczającą ilość informacji, aby Drupal mógł to zrobić poprawnie.Szczegóły znajdują się w dokumentacji, ale krótka wersja
Breadcrumb
implementujeRefinableCachableDependencyInterface
. W swojej klasie konstruktora będziesz chciał wywoływaćaddCachableDependency()
dowolne jednostki lub obiekty konfiguracyjne, które są używane do budowania bułki tartej. Dokumentacja „CacheableDependencyInterface & friends” zawiera bardziej szczegółowe informacje na temat tego, jak i dlaczego.Jeśli istnieją inne konteksty, w których bułka tarta może ulec zmianie, musisz również ręcznie użyć,
addCacheContexts()
aby upewnić się, że blok się zmienia,addCacheTags()
aby upewnić się, że wpis w pamięci podręcznej może zostać poprawnie unieważniony, amergeCacheMaxAge()
jeśli pamięć podręczna jest wrażliwa na czas i musi wygasnąć.Jeśli nie zostanie to wykonane poprawnie, jedna z niestandardowych usług konstruktora Breadcrumb „wygra”, a bułka tarta dla tej konkretnej strony będzie wyświetlana na każdej stronie wszystkim użytkownikom na zawsze.
źródło
Jest inny sposób na osiągnięcie tego.
A następnie utwórz inny plik w folderze szablonów kompozycji o nazwie „breadcrumb.html.twig” i umieść poniższy kod w tym pliku:
Otóż to. Teraz opróżnij pamięć podręczną, a pojawi się menu nawigacyjne z bieżącym tytułem strony, takim jak Strona główna / Bieżący tytuł strony. Możesz zmienić separator, zastępując „/” żądanym.
źródło
Powinieneś użyć modułu contrib, aby dodać bieżący tytuł strony do breadcrumb, takiego jak Current Page Crumb: https://www.drupal.org/project/current_page_crumb
Jeśli chcesz go ręcznie kodować, możesz pobrać kod z folderu src tego modułu. Więcej informacji o bułce tartej Drupal 8 można znaleźć tutaj: http://www.gregboggs.com/drupal8-breadcrumbs/
źródło
drush en current_page_crumb
nie jest tak źle.Użyłem niestandardowych bułek tartych przy użyciu tokena w Drupal 7, a kiedy ten moduł nie był dostępny w Drupal 8, ostatecznie stworzyłem widoki dla moich indywidualnych typów treści, używając pól, które pierwotnie były polami tokenów. Używanie go jako bloku i wyłączanie normalnej bułki tartej. To było trochę więcej pracy niż Custom Breadcrumbs, ale działa.
źródło