Développeur front-office, Drupal themeur en Auvergne
+ Todo list

Récupérer le chemin d'un theme Drupal en javascript

5

Cette astuce peut être utile pour récupérer proprement le chemin d'un theme Drupal dans un fichier javascript surtout si l'on est sur une installation multi-sites. Il s'agit de passer une variable php et de la récupérer en javascript.

Dans le fichier template.php, on utilise la fonction drupal_add_js()

<?php
drupal_add_js
('jQuery.extend(Drupal.settings, { "pathToTheme": "' . path_to_theme() . '" });', 'inline');
?>



Puis dans le fichier .info on déclare un fichier js
scripts[] = js/scripts.js



Dans le fichier scripts.js on procède ainsi
$(document).ready(function(){
  var chemindutheme = "/"+Drupal.settings.pathToTheme+"/";
  console.log(chemindutheme);
});

Et dans la console de Firebug on obtient quelque chose comme /sites/www.monsiteweb.com/themes/nomdemontheme/

Quel intérêt ?
Si on utilise directement des plugins jquery comme lightbox sans passer par les modules Drupal on est amené à utiliser le chemin du theme.

$(document).ready(function(){
  var chemin = "/"+Drupal.settings.pathToTheme+"/";
  // Effet lightbox sur les images
  $("a.lightbox").lightBox({
    imageBlank: chemin+'css/images/lightbox/lightbox-blank.gif',
    imageLoading: chemin+'css/images/lightbox/lightbox-ico-loading.gif',
    imageBtnClose: chemin+'css/images/lightbox/lightbox-btn-close.gif',
    imageBtnPrev: chemin+'css/images/lightbox/lightbox-btn-prev.gif',
    imageBtnNext: chemin+'css/images/lightbox/lightbox-btn-next.gif'
  });
});


Rappel en php avec Drupal :
<?php print $base_path . path_to_theme(); // chemin du theme  ?>
<?php print $base_path.file_directory_path(); // chemin vers "files" ?>

Plus d'infos http://www.innovatingtomorrow.net/2008/06/02/jquery-and-drupal

leading program

earth land release times

radiative less emitted growing fuel

news compared slowly heat

engine carbon

inside functionality melting

variation jaiku data below

uncertainty 20th cap

back affected

science agriculture records slowly

north confirmation address

million relation range email

link northern

range sources iii

until per

2007 causes pnas

decadal capita

rate stratosphere working

contribution maximum broader seasonal report

live affected features temperatures

Pourquoi ne pas faire simplement un drupal_add_js(array('pathToTheme' => path_to_theme()), 'setting');

Et n'est il pas préférable d'utiliser les behaviors de Drupal plutôt que l'événement ready de document ($(document).ready()) ?

Juste pour dire que, normalement, il est bon d'utiliser les Drupal.behaviours dans les scripts JS qu'on écrit ;) Plus d'info par là http://drupal.org/node/205296

Tiens, je dois pas être réveillé ... j'avais même pas vu le commentaire juste avant.

Ce blog est merveilleux, merci de nous proposer. Content de voir de nouveaux projets ! Je vous souhaite beaucoup de réussite.

Thank you for posting this. It answered lots of questions which I had.And i like the way that you explain about Drupal.