Saya mencoba merender templat dalam Drupal 8. Dalam Drupal 7, saya akan membuat tema dengan hook_theme, membuat direktori templat dalam modul saya, memasukkan file templat ke dalamnya dan saya bisa menampilkannya dengan theme (). Bagaimana saya melakukan eqivilent dengan Drupal 8? Saya mencoba yang berikut ini, tetapi gagal:
Di twitter_pull.module
/ ** * Menerapkan hook_theme (). * / function twitter_pull_theme ($ existing, $ type, $ theme, $ path) { mengembalikan array ( 'twitter_pull_tweet_listing' => array ( 'variabel' => array ( 'description' => array (), ), 'template' => 'templates / twitter_pull_tweet_listing', ), ); }
Di dalam twitter_pull / templates: the twitter_pull_tweet_listing.html.twig
Di dalam blok saya:
$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params)); $ output = drupal_render ($ tweet_template, array ('params' => $ params)); cetak $ output;
Saya mendapatkan kesalahan berikut di log saya:
Kesalahan pengguna: "konten" adalah kunci larik render yang tidak valid di Drupal \ Core \ Render \ Element :: children () (baris 89 dari C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element. php).
EDIT: Kesalahan lain:
Twig_Error_Loader: Tidak dapat menemukan templat "modul / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig" (melihat ke dalam: C: \ xampp \ htdocs \ drupal). di Twig_Loader_Filesystem-> findTemplate () (baris 202 dari C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php).
Saya membayangkan kesalahan ini terjadi karena saya tidak menggunakan namespace dan autoloading dengan benar. Di mana saya meletakkan file template saya? Berdasarkan pesan kesalahan, saya bahkan mencoba untuk meletakkannya di C: \ xampp \ htdocs \ drupal \ templates \ tetapi masih tidak berfungsi.
drupal_render()
? Ini mengharapkan booleantemplates/templates/
dari pesan kesalahan ke-2 membuat saya berpikir Anda harus mencoba'template' => 'twitter_pull_tweet_listing',
daripada'template' => 'templates/twitter_pull_tweet_listing',
dihook_theme()
Jawaban:
Secara umum di Drupal 8 Anda harus meninggalkan garis templat dan memberi nama templat yang sama dengan kait Anda, mengubah garis bawah menjadi garis putus-putus. Ini diubah karena templat adalah format keluaran default untuk keluaran bertema di D8. Jadi dalam kasus Anda ini
hook_theme()
:... akan menunjuk ke templat di
templates/twitter-pull-tweet-listing.html.twig
. (Itu menggunakan sintaks array pendek .)Catatan perubahan yang relevan: https://www.drupal.org/node/2231673
Dan juga, dari blok atau pengontrol, harap kembalikan array render alih-alih string. Dengan cara itu hasilnya dapat dimanipulasi sesudahnya dan data mentah masih dapat diakses di telepon. Dengan kata lain, hindari menelepon
drupal_render()
dari kode Anda jika memungkinkan. Ini berlaku untuk Drupal 7 juga: https://www.drupal.org/node/930760#creatingJadi dari blok Anda:
sumber