Vlastní breadcrumb pro nody s referencí na hierarchickou kategorii
Dejme tomu, že máte node typu Produkt a ten má field typu entity reference odkazující na Taxonomy termín, např. z kategorie Produktová kategorie. Např. Produkt Jablko je v kategorii a podkategoriích Zahrada->Ze stromu->Podzimní.
Když zobrazíte produkt, chcete, aby drobečková navigace respektovala kategorie, kde je produkt začleněn, ale Drupal to neudělá, protože neví, podle čeho by měl breadcrumbs sestavit. Nastavit pattern pro hezké URL aliasy pomocí Pathauto se mi nepovedlo, protože neexistuje token, který by uměl zohlednit hierarchickou cestu pro referencovanou taxonomii. Proto jsem se rozhodl vysvětlit Drupalu, jak sestavit vlastní breadcrumb pomocí modulu. Zde definuji, za jaké podmínky se má vlastní breadcrumb použít a jak se mají jednotlivé navigační odkazy sestavit. Jelikož zanoření kategorií může být do různých úrovní, bylo třeba na to myslet a volat metodu pro získání předka či rodiče kategorie rekurzivně.
Můj cíl bylo získat pro produkt Jablko něco takového: Home->Seznam kategorií (což je view)->Zahrada->Ze stromu->Podzimní.
Co jsem se přitom naučil, se můžete podívat na mém GitHubu a když si kód upravíte, můžete ho použít pro vlastní řešení s vašimi views a content typy. Soubor BreadcrumbBuilder.php patří do adresáře název_modulu/src/, soubor breadcrumb.services.yml patří do adresáře název_modulu/. Soubor .info.yml jsem tam nedával, protože si ho udělá každý podle sebe, a kdo to neumí, tak pro něj stejně nemá cenu dál číst :) Další podrobnosti jsou v komentářích Docbloku.
Drupal 8: Custom breadcrumbs for node with hierarchical taxonomy term reference
UPDATE: Nakonec se ukázalo, že to jde zvládnout i bez programování. Kolega Miro Michalička našel link, kde někdo objevil nějaký tajný fungující pattern pro Pathauto ve znění
/articles/[node:field_tags:0:entity:parents:join-path]/[node:field_tags:0:entity]/[node:title]kde field_tags je název fieldu s referencí.
Tajný píšu proto, že se nikde v nabídce tokens neobjevuje a dotyčný na něj musel přijít nějakým zázrakem, nebo usilovným hledáním v kódu. Použití tohoto patternu umožňuje, aby byl prakticky pro všechny rozumné případy použitý Drupal modul easy_breadcrumb, který ve spojení s PathAuto odvozuje breadcrumbs z URL adres. Takže pak není nutné psát vlastní breadcrumb.
