Comment puis-je faire en sorte qu'un thème nécessite Jquery (pour les utilisateurs anonymes)?

7

Je crée un thème pour D8 appelé 'herchel'.J'essaye d'obtenir que ce thème nécessite jquery sur toutes les pages (D8 ne charge pas Jquery pour les utilisateurs anonymes par défaut)

En parcourant le peu de documentation que je peux trouver sur les thèmes principaux, j'ai créé un fichier appelé herchel.libraries.yml

J'ai essayé ce qui suit ... sans succès:

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

-

drupal:
version: VERSION
  dependencies:
    - core/jquery

-

herchel:
version: VERSION
  dependencies:
    - core/jquery

Quelqu'un at-il des idées sur ce que je dois y mettre?

mherchel
la source
Le troisième a raison, je pense que le problème est juste un espace blanc - essayez de mettre en retrait la ligne avec versionpour faire correspondredependencies
Clive

Réponses:

11

J'ai rencontré cette mise à niveau de l'un de mes thèmes de contribution vers Drupal 8 car je voulais jquery.once pour les utilisateurs anonymes. Voici ce que j'ai fait qui fonctionne très bien:

Dans herchel.libraries.yml

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

Puis dans le fichier herchel.theme de votre thème .

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);
}

Faites également attention à l'indentation pour le code YML. Bien qu'il ne soit pas encore très bien documenté, vous pouvez consulter ce problème et son journal des modifications.

Remplacez hook_library_info () par le fichier * .libraries.yml

Notez que vous voyez également le fichier "scripts.js" d'un thème théorique dans le code ci-dessus mais vous n'en aurez peut-être pas besoin. Dans mon thème, c'est ce qui utilise jquery pour appeler du code personnalisé.

Ce code est probablement aussi une bonne référence pour les bits YML. Notez que dans les deux cas versionest au même niveau que dependencies.

J'ai également fait une liste des problèmes rencontrés avec Drupal 8 et j'ai participé à ma mise à niveau D8.

Mise à jour:

J'ai corrigé le code, nous avons rencontré ce problème: remplacez les valeurs du tableau de la bibliothèque #attached par des chaînes à espace de nom de fournisseur

Notez ceci:

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

contre cela

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

J'ai testé et les erreurs ont disparu. :)

Danny Englander
la source
Danny, tu es génial! Mais je reçois des erreurs PHP. Avertissement: explode () s'attend à ce que le paramètre 2 soit une chaîne, tableau donné dans _drupal_add_library () (ligne 2676 de core \ includes \ common.inc). Avertissement: explode () s'attend à ce que le paramètre 2 soit une chaîne, tableau donné dans drupal_get_library () (ligne 2741 de core \ includes \ common.inc). Ces erreurs apparaissent quel que soit le contenu du fichier herchel.libraries.yml. J'ai essayé de contourner cela un peu sans succès. J'ai également essayé votre code à partir de Gratis mais cela semble être avant que le problème 8507583 ne soit
validé
1
$ page ['# attaché'] ['bibliothèque'] [] = 'libraryprovider / libraryname';
Mike, le nouveau code de Gratis est uniquement dans la version de développement ( drupalcode.org/project/gratis.git/tree/refs/heads/8.x-1.x ) et je l'ai testé et il fonctionne avec la dernière version Alpha de D8. Je suis à peu près tête baissée sur un projet aujourd'hui, mais je pourrai peut-être aider ce week-end. Quelle version de D8 utilisez-vous?
Danny Englander
Comment y parvenir sans utiliser de fonction de prétraitement?
itsdarrylnorris
11

Dans votre thème, créez un fichier de bibliothèques herchel.libraries.yml. Dans ce fichier, mettez:

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

En herchel.info.ymlrésumé:

libraries:
  - herchel/libname
Dragan Eror
la source
Il y avait un problème à ce sujet et il a été résolu lors des Drupal Developer Days à Szeged.
Dragan Eror
J'ai mis à jour et testé le code dans ma réponse, c'est probablement le problème que nous avons rencontré en fonction du message d'erreur. drupal.org/node/2203407
Danny Englander
Peut-être que cela vous aidera également ... Page de documentation sur la mise en œuvre des bibliothèques drupal.org/node/2216195
Dragan Eror
0

Vous avez peut-être ajouté des espaces avant les "dépendances:"

c'est vrai:

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

par exemple, c'est faux:

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
la source