Saya mencoba menyematkan tampilan dalam node tertentu. Saya menemukan tutorial untuk melakukan ini dengan Drupal 7 dan PHP-Templates:
<?php print views_embed_view('view_name'); ?>
Tapi saya mencari cara di Drupal 8 dengan ranting-Template. Saya mencoba memanggil views_embed_view()
fungsi di hook_node_view()
dan menetapkannya ke node sehingga saya bisa mencetaknya di ranting-Templat. Tetapi tampaknya kait ini tidak pernah dipanggil.
Adakah petunjuk / solusi bagaimana melakukan ini dengan cara Drupal 8?
Ini adalah cara kerjanya untuk saya di sub-tema Drupal 8 beta 12 Classy.
Dalam file your_theme.info.theme Anda
Saya menyalin node.html.twig dan mengelilingi tag artikel (atau area yang ingin Anda ganti) dengan ranting blok. Saya menempatkan ini di folder / templat / konten.
Kemudian saya membuat simpul - 2.html.twig (ganti 2 dengan simpul yang diinginkan) di folder / template / content dengan kode berikut.
sumber
Masalah pertama yang Anda hadapi adalah entitas yang dirender seperti node sekarang di-cache secara default, jadi hook_node_view () hanya dipanggil satu kali setelah cache membersihkan / menyimpan simpul itu.
Namun, ini cukup mudah untuk dinonaktifkan, lihat setting.local.php.
Kemudian, menempatkan output view dalam $ build cukup mudah dan lebih atau kurang berfungsi seperti pada 7.x. Alih-alih menggunakan fungsi sematan, pertimbangkan untuk menggunakan $ views = Views :: getView () dan kemudian $ views-> buildRenderable ()
Dua tips:
sumber
settings.local.php
dan membersihkan semua cache. Tapi kail sayathemename_node_view()
dithemename.theme
masih akan tidak disebut. Apakah Anda tahu mengapa ini bisa terjadi?Ketika Berdir menyinggung View-> buildRenderable adalah apa yang Anda cari, tetapi untuk memberikan lebih banyak konteks dalam modul Anda harus melakukan hal berikut.
Kemudian dalam templat halaman Anda, Anda dapat mengaksesnya
sumber
Dalam tampilan, Anda dapat membuat blok dengan data yang relevan.
Setelah pembuatan blok, Anda dapat menetapkan blok untuk muncul di area konten yang Anda inginkan (footer / header / konten / dll). Tetapkan, lalu klik "konfigurasikan". Anda harus dapat "Tampilkan blok pada halaman tertentu". Memilih "Hanya halaman yang terdaftar" dan menambahkan / node / your-node-number ke spesifikasi halaman harus membatasi bahwa tampilan / blok hanya muncul dengan node yang Anda inginkan.
Bersulang!
sumber
views_embed_view()
pendekatannya jauh lebih mudah dan lebih bersih saya kira.Saya tahu Anda menyebutkan Anda ingin menggunakan templat ranting tetapi Anda bisa menggunakan modul Bidang Referensi Tampilan untuk menghindari keharusan menggali di dalam templat. Juga memberikan keuntungan karena dapat menambahkannya ke entitas yang dapat bidang sehingga editor konten dapat mengonfigurasi tampilan / output.
sumber