Bagaimana cara membuat tema memerlukan Jquery (untuk pengguna anonim)?

7

Saya membuat tema untuk D8 yang disebut 'herchel'. Saya mencoba untuk mendapatkan tema ini untuk memerlukan jquery di semua halaman (D8 tidak memuat Jquery untuk pengguna anonim secara default)

Melihat sedikit dokumentasi yang dapat saya temukan di samping tema inti, saya membuat file bernama herchel.libraries.yml

Saya sudah mencoba yang berikut ... semua tanpa hasil:

drupal.herchel:
version: VERSION
  dependencies:
    - core/jquery

-

drupal:
version: VERSION
  dependencies:
    - core/jquery

-

herchel:
version: VERSION
  dependencies:
    - core/jquery

Adakah yang punya ide tentang apa yang perlu saya masukkan ke dalam ini?

mherchel
sumber
Yang ketiga benar, saya pikir masalahnya hanya spasi putih - coba indentasi baris versionagar sesuaidependencies
Clive

Jawaban:

11

Saya berlari ke peningkatan ini salah satu tema contrib saya ke Drupal 8 karena saya ingin jquery.once untuk pengguna anonim. Inilah yang saya lakukan yang bekerja sangat baik:

Di herchel.libraries.yml

herchel-corescripts:
  version: VERSION
  js:
    js/scripts.js: {}
  dependencies:
    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once

Kemudian di file herchel.theme tema Anda .

function herchel_preprocess_page(&$vars, $hook) {
  // Render the library as laid out in herchel.libraries.yml
  $libraries['#attached']['library'][] = 'herchel/herchel-corescripts';
  \Drupal::service('renderer')->renderRoot($libraries);
}

Perhatikan indentasi juga untuk kode YML. Meskipun belum benar-benar didokumentasikan dengan baik, Anda dapat melihat masalah ini dan log perubahannya.

Ganti hook_library_info () dengan file * .libraries.yml

Perhatikan bahwa Anda juga melihat file "scripts.js" tema teoretis dalam kode di atas tetapi Anda mungkin tidak membutuhkannya. Dalam tema saya, itulah yang menggunakan jquery untuk memanggil kode khusus.

Kode ini mungkin juga merupakan referensi yang baik untuk bit YML. Perhatikan bahwa dalam kedua kasus versionberada pada tingkat yang sama dengan dependencies.

Saya juga membuat daftar masalah Drupal 8 yang saya temui dan ikut serta dalam peningkatan D8 saya.

Memperbarui:

Saya telah memperbaiki kode, kami mengalami masalah ini: Ganti nilai array perpustakaan #attached dengan string penyedia-namespaced

Catat ini:

 $libraries['#attached']['library'][] = array('herchel', 'herchel-corescripts');

vs.ini

$libraries['#attached']['library'][] = 'herchel/herchel-corescripts';

Saya menguji dan kesalahan hilang. :)

Danny Englander
sumber
Danny, kau luar biasa! Tapi, saya mendapatkan beberapa kesalahan PHP. Peringatan: explode () mengharapkan parameter 2 menjadi string, array yang diberikan dalam _drupal_add_library () (baris 2676 dari inti \ termasuk \ common.inc). Peringatan: explode () mengharapkan parameter 2 menjadi string, array yang diberikan di drupal_get_library () (baris 2741 dari inti \ termasuk \ common.inc). Kesalahan ini muncul terlepas dari apa yang ada di file herchel.libraries.yml. Saya mencoba mengatasinya sedikit tanpa hasil. Saya juga mencoba kode Anda dari Gratis tetapi tampaknya sebelum edisi 8507583 telah dilakukan
mherchel
1
$ page ['# terlampir'] ['library'] [] = 'libraryprovider / libraryname';
Mike, kode baru dalam Gratis hanya dalam versi dev ( drupalcode.org/project/gratis.git/tree/refs/head/8.x-1.x ) dan saya mengujinya dan bekerja dengan Alpha terbaru dari D8. Saya cukup banyak mengerjakan proyek hari ini, tetapi saya mungkin bisa membantu akhir pekan ini. Versi D8 apa yang Anda gunakan?
Danny Englander
Bagaimana bisa mencapai ini tanpa menggunakan fungsi preproses?
itsdarrylnorris
11

Dalam tema Anda buat file perpustakaan herchel.libraries.yml. Ke dalam file ini masukkan:

libname:
  version: 1.x
  js:
    js/scripts.js: {}
  css:
    theme:
      css/styles.css: {}
  dependencies:
    - core/jquery

Di tempat herchel.info.yml:

libraries:
  - herchel/libname
Dragan Eror
sumber
Ada masalah tentang ini dan itu diperbaiki pada Hari Pengembang Drupal di Szeged.
Dragan Eror
Saya telah memperbarui dan menguji kode dalam jawaban saya, ini kemungkinan besar masalah yang kami hadapi berdasarkan pada pesan kesalahan. drupal.org/node/2203407
Danny Englander
Mungkin ini juga akan membantu ... Halaman dokumentasi tentang implementasi perpustakaan drupal.org/node/2216195
Dragan Eror
0

Mungkin Anda telah menambahkan spasi sebelum "dependensi:"

ini benar:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

misalnya ini salah:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
    dependencies:
      - core/jquery
      - core/drupal
      - core/drupalSettings
Amin
sumber