Saya sudah mencoba mendefinisikan override breadcrumb baru, tetapi saya masih mendapatkan situs default.
Saya telah membuat modul khusus, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Inilah foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
Di dalam src/BreadcrumbBuild.php
, saya punya:
<?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;
}
}
?>
Saya mulai mengerjakan satu - satunya writeup yang dapat saya temukan di remah roti Drupal 8 , tetapi masalahnya tampaknya menggunakan versi lama dari autoloading PSR-4 yang tidak lagi terpasang (sebagai catatan saya menggunakan 8.0.0 -dev-beta3), jadi saya membahas bagaimana semua modul lainnya bekerja di basis kode.
Sekarang saya cukup yakin ini benar untuk mendapatkan modul memuat; namun saya tidak yakin apakah
class BreadcrumbBuild extends BreadcrumbBuilderBase
benar. Masalahnya adalah bahwa tutorial lama yang saya tautkan dengan menyebutkan berasal dari BreadcrumbBuilderBase
, tetapi semakin banyak dokumen saat ini tampaknya tidak menyebutkannya dan saya bertanya-tanya apakah itu sudah ketinggalan zaman - dan bagaimana saya harus melakukan ini.
Demikian juga, saya tidak begitu mengerti apa yang dilakukan services.yml
file dalam hal ini, tidak ada dokumentasi di mana pun untuk ini.
sumber
Baiklah, kita lanjut lagi. Jawaban-jawaban ini sebagian besar benar. Satu hal yang tidak dapat Anda lupakan adalah "tag cache" dan "konteks cache".
Saya menyiapkan istilah taksonomi pada simpul sebagai remah roti.
Saya mendapatkannya bekerja dengan saran dari posting ini, tetapi kemudian saya mengklik dan melihat remah roti yang sama pada setiap halaman.
Singkat cerita, pastikan untuk mengatur beberapa konteks dan tag cache.
Inilah layanan saya di intisari: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Inilah metode build () saya:
sumber
Perbarui 2016 Drupal 8
Dokumentasi menyatakan bahwa Anda harus mengembalikan turunan dari kelas breadcrumb. Jika Anda kesulitan membuatnya bekerja. di sini adalah solusi yang bekerja untuk saya.
Lalu file yml
PS: jika Anda menggunakan bootstrap pergi ke
/admin/appearance/settings
halaman pengaturan Anda dan lihat pengaturan remah roti.Show 'Home' breadcrumb link
harus diperiksa. DanShow current page title at end
harus diperiksa.Setelah semua ini dilakukan, bersihkan cache Anda. Setiap kali Anda mengubah file YML, bahkan dalam mode debug, Anda perlu menghapus cache Anda. Anda dapat pergi ke
/core/rebuild.php
jika Anda macet dan tidak dapat membangun kembali.sumber
Jangan lupa caching
Cache render diubah cukup terlambat dalam siklus pengembangan D8, dan karena itu tidak disebutkan dalam seri d8ftw, atau jawaban lain untuk pertanyaan ini.
The Cache dokumentasi API merujuk secara khusus untuk membuat array, tetapi semua instruksi yang berlaku untuk Breadcrumbs. Breadcrumbs memiliki
toRenderable()
metode, Drupal akan mencoba untuk me-cache mereka di cache render, dan itu berarti Anda harus menentukan informasi yang cukup untuk memungkinkan Drupal melakukannya dengan benar.Detailnya ada di dokumen, tetapi versi singkatnya adalah yang
Breadcrumb
mengimplementasikanRefinableCachableDependencyInterface
. Di kelas pembangun Anda, Anda akan ingin memanggiladdCachableDependency()
dengan semua dan semua entitas atau objek konfigurasi yang digunakan untuk membangun remah roti. Dokumentasi untuk 'CacheableDependencyInterface & friends' menjelaskan lebih detail tentang bagaimana dan mengapa.Jika ada konteks lain di mana remah roti mungkin berubah, Anda juga harus menggunakan secara manual
addCacheContexts()
untuk memastikan blok bervariasi,addCacheTags()
untuk memastikan entri cache dapat dibatalkan dengan benar, danmergeCacheMaxAge()
jika cache sensitif terhadap waktu dan perlu kedaluwarsa.Jika ini tidak dilakukan dengan benar, salah satu layanan pembuat Breadcrumb kustom Anda akan 'menang', dan remah roti untuk satu halaman tertentu akan disajikan di setiap halaman, untuk semua pengunjung, selamanya.
sumber
Ada cara lain untuk mencapai ini.
Dan kemudian buat file lain di folder templat tema Anda yang dinamai "breadcrumb.html.twig" dan tuliskan kode di bawah ini dalam file ini:
Itu dia. Sekarang siram cache dan Anda akan mendapatkan remah roti dengan judul halaman saat ini seperti Home / Current Page Title. Anda dapat mengubah pemisah dengan mengganti "/" dengan yang diinginkan.
sumber
Anda harus menggunakan modul contrib untuk menambahkan judul halaman saat ini ke breadcrumb seperti Crumb Halaman Saat Ini: https://www.drupal.org/project/current_page_crumb
Jika ingin memberikan kode tangan, Anda dapat menarik kode dari folder src pada modul itu. Anda dapat menemukan rincian lebih lanjut tentang Drupal 8 breadcrumbs di sini: http://www.gregboggs.com/drupal8-breadcrumbs/
sumber
drush en current_page_crumb
tidak terlalu buruk.Saya telah menggunakan Custom Breadcrumbs menggunakan token di Drupal 7 dan ketika modul itu tidak tersedia untuk Drupal 8, saya akhirnya membuat tampilan untuk masing-masing tipe konten saya menggunakan bidang yang awalnya merupakan bidang token. Menggunakannya sebagai blok dan menonaktifkan remah roti normal. Itu sedikit lebih banyak bekerja daripada Custom Breadcrumbs tetapi berhasil.
sumber