Ajouter un script
De nombreuses bibliothèques Jquery sont présentes en natif dans l'architecture de Drupal 8.
Cependant, leur mise en oeuvre dans mon site n'a pas été intuitive pour plusieurs raisons :
- la documentation en français sur la question est très rare ;
- la documentation en anglais n'est pas adaptée pour un développeur amateur ;
Ces notes restituent donc les étapes à suivre pour utiliser un script JS dans un site sous D8.
NB1 : Pour clarifier ces notes, je suppose dans la suite de ce billet que le thème sur lequel nous travaillons se nomme dh. Les fichiers seront donc stockés dans le répertoire custom/dh.
NB2 : revoir l'organisation des fichiers d'un thème
- adapter le fichier dh.info.yml présent dans themes/custom/dh (ou "dh" est à remplacer par le nom de votre thème) ;
- adapter le fichier dh.libraries.yml présent dans ce même répertoire ;
- créer votre fichier script.js
- décocher "agréger les fichiers javascript" de la page /admin/config/development/performance ; enregistrer cette modification ;
- vider les caches (depuis cette même page) ;
- re-cocher "agréger les fichiers javascript".
1. le fichier dh.info.yml
le fichier dh.info.yml doit comporter dans sa section libraries la ligne - dh/global-scripts où global-scripts est une section du fichier des librairies
name: dh
type: theme
description: 'mon theme drupal 8 '
package: dh
core: 8.x
libraries:
- dh/global-styling
- dh/global-scripts
base theme: classy
logo: images/dhsite.gif
screenshot: screenshot.png
regions:
header: Header
content: Content
help: Help
breadcrumb: Breadcrumb
page_top: 'Page top'
page_bottom: 'Page bottom'
highlighted: Highlighted
featured: Featured
sidebar_first: 'Left sidebar'
sidebar_second: 'Right sidebar'
footer: Footer
2. le fichier dh.libraries.yml
Ajouter la section global-scripts (cf. dh.info.yml) et ses 2 sous-sections : js et dependencies.
- la section js indique le nom et l'emplacement du script. Dans mon exemple :
- il se nomme script.js
- il se trouve dans le dossier "custom/dh/js" ( rappel : dh est le nom du thème)
- la section "dependencies" liste les bibliothèques utiles à l'exécution du script dhv3.js
- dans mon exemple celles-ci figurent dans le coeur de drupal (dossier "core" du site)
global-styling:
css:
component:
css/style.css: {}
css/dhv3-sf.css: {}
global-scripts:
js:
js/script.js: {}
dependencies:
- core/jquery
- core/jquery.ui
3. le fichier script.js
Dans ce fichier figureront les instructions permettant de styliser nos pages de manière dynamique.
En dehors de Drupal, un script qui utilise des fonctions d'une bibliothèque jQuery débute par
$(function(){
....
});
dans l'environnement D8, votre script doit débuter par
(function ($) {
Drupal.behaviors.dh = {
attach: function (context, settings) {
......
}
};
})(jQuery);
Pour des plus amples informations sur Drupal.behaviors, cliquez ici.
Le script suivant
- colore en rouge le contenu des balises <h1>
- colore en rouge les éléments du DOM de classe .book-navigation
- affiche le texte "et oui, ca marche" dans la console des outils de développement web des navigateurs.
(function ($) {
Drupal.behaviors.dhv3 = {
attach: function (context, settings) {
$('h1').css('color','red');
$('.book-navigation', context).css('color','red');
console.info ('et oui, ca marche...');
}
};
})(jQuery);
- 8 vues

Pour ajouter un script aux pages d'un site sous Drupal :
- déclarer la hiérarchie global-scripts dans la hiérarchie racine du thème ( xxxx.info.yml ) ;
- définir cette hiérarchie dans la hiérarchie libraries du thème ( xxx.librarie.yml) ;
- si le script fait appel à une bibliothèque jQuery, alors dans le script définir l'appel à jQuery par (function ($) {
Drupal.behaviors.xxxx = {
attach: function (context, settings) {
......
}
};
})(jQuery);