Di Drupal 7, saya bisa menggunakan file template.phpdrupal_add_js
tema sebagai fungsi:theme_preprocess_html(&$vars)
drupal_add_js(drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
array(
'group' => JS_THEME,
'preprocess' => TRUE,
'weight' => '999',
));
$vars['scripts'] = drupal_get_js();
Dalam Drupal 8, saya sudah mencoba mengkonversi ini menggunakan attached
dalam tema saya .theme berkas seperti:
$vars['#attached']['js'] = array(
array(
'data' => drupal_get_path('theme', 'mytheme') . '/js/scripts.js',
'options' => array(
'group' => JS_THEME,
'preprocess' => TRUE,
'every_page' => TRUE,
),
),
);
... tapi itu tidak berhasil dan tidak ada kesalahan dalam pengawas / konsol atau sebaliknya.
Menurut halaman D8 API untuk drupal_add_js
:
Tidak digunakan lagi - mulai dari Drupal 8.0. Gunakan kunci #attached di render array sebagai gantinya.
Tidak ada info lebih lanjut tentang itu. Tampaknya drupal_add_css
juga akan menggunakan metode ini. Saya tahu ini masih hari-hari awal untuk Drupal 8 tetapi saya berharap untuk melompat pada ini.
theming
8
javascript
Danny Englander
sumber
sumber
Jawaban:
Tampaknya Anda dapat menggunakannya
hook_preprocess_page
dengan melampirkan:Ini berfungsi baik ( theme.inc menggunakan metode ini), perhatikan array bersarang ekstra di sekitar berat.
sumber
Titik kunci dalam dokumentasi adalah bit ini
Tekankan milikku.
The
$variables
array dalam fungsi tema / preprocess tidak array membuat, itu hanya sebuah array memegang variabel. Untuk menggunakan#attached
Anda akan membutuhkan sesuatu seperti ini di fungsi preprocess:Dan ini di file templat:
Dengan kata lain, kurang lebih sama dengan di Drupal 7 (setidaknya pada titik waktu ini).
hook_preprocess_html()
omong-omong sepertinya bukan tempat yang tepat untuk kode ini; jangan lupa file js / css benar-benar dirender dalam template itu, jadi sudah terlambat untuk menambahkan lagihook_preprocess_page()
,hook_preprocess_node()
atau yang setara mungkin akan memberi Anda hasil yang lebih andal.Lihat halaman Twig best practices - fungsi preproses dan templat untuk informasi lebih lanjut tentang variabel preproses.
sumber
{{ foo }}
di dunia Twig, tidak ada lagi php / print render dalam templat tema, yaitunode.html.twig
/page.html.twig
#attached
dalam konteks array render; dokumentasinya benar. Anda harus menggunakan metode di atas, bersamaan dengan ini untuk preprocess dan pra-render variabel, atau menggunakan file .info.yml tema Anda untuk memasukkan JS. Itulah satu-satunya pilihan yang bisa saya katakan sejauh ini, tanpa melewati rute perpustakaanhook_library_info
dan yang tersirat Mołot di atas. Saya harus bermain-main dengan itu sedikit. Terima kasih.Pada Drupal 8.0.x-beta2 Anda dapat melampirkan CSS dan JS dari fungsi preprocess.
Lihat https://www.drupal.org/node/2352319
sumber
Dalam contoh ini Anda menggunakan array render nyata dan bukan yang dirender dalam fungsi itu sendiri.
Dengan cara ini modul lain, tema dll dapat mengubahnya.
sumber
Meskipun OP adalah tentang Drupal 8, ini bisa dilakukan dengan cara yang sama di Drupal 7 tanpa menggunakan
drupal_add_js()
untuk mulai terbiasa untuk tidak memilikidrupal_add_js()
sekitar:Opsi dapat didefinisikan dalam array kosong, lihat https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7 .
sumber