Du javascript

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

slt..
Je veux intégrer du code javascript dans mon corps de la page...
Comment je peux le faire..?? et Merci..

Version de Drupal : 

bjr..
cette méthode m'a affiché l'interprétation du code JavaScript dans tout le site, c-a-d dans toutes les "nodes". Or moi je le veux seulement par exemple dans le corp de "node/1":article ou page...
Merci de m'aider sur ça...

Ce n'est pas très clair : tu veux juste dans node/1 ? ou dans un type de contenu particulier ?

Tu as plusieurs solutions :
1) la suggestion de template qui te permet de créer un template particulier pour un node ou un type de node; ce qui te permettra de cibler ton js
http://drupal.org/node/190815
2) faire un petit test php pour l'inclusion de ton js genre

<?php
if(arg(0)=='node' && arg(1)==1){
  print
'<ton code javascript>';
}
?>

ou , car je crois que sur drupal 6 on a accès à l'objet node dans les page.tpl

<?php
if($node->nid==1){
  print
'<ton code javascript>';
}
?>

ou encore

<?php
if($node->type=='page'){
  print
'<ton code javascript>';
}
?>

Il doit aussi être possible de mettre ton code js directement dans le node si tu choisis le format d'entrée "php" -qui ne filtre rien contrairement aux autres format d'entrée qui empeche ton js de s'éxécuter.

Enfin je pense que tu dois même pouvoir le mettre dans un bloc que tu afficheras uniquement sur les pages que tu souhaites, si c'est un bout de script qui peut fonctionner de n'importe où dans la page. (même remarque pour le format d'entrée)

Il doit aussi être possible de mettre ton code js directement dans le node si tu choisis le format d'entrée "php" -qui ne filtre rien contrairement aux autres format d'entrée qui empeche ton js de s'éxécuter.

Rhoooo c'est très vilain ça :) Ca doit être simple à maintenir :)

Au final, c'est quoi le plus propre ? Parce que modifier le template, c'est pas terrible non ?
Je cherche aussi à insérer quelques fonctions JS dans un type de contenu particulier.

Je pensais (bêtement) que l'on pouvait le faire dans le formulaire de définition du type de contenu. Je précise que j'utilise un type perso tout simple, sans utilisation de CCK.

Merci de m'éclairer ...

Tu as un fichier script.js par défaut normalement dans ton thème. Tu peux te servir de ce fichier pour insérer tes quelques fonctions JS.

Sinon tu peux ajouter des fichiers javascript supplémentaires en les renseignants dans le .info de ton thème, par exemple :

scripts[] = tonscript.js

Merci Marvine.

Tes 2 solutions impliquent encore une fois de modifier le thème. Mais imagine un site où tu permet à l'utilisateur de changer de thème. Tu vas propager la modif dans tous les thèmes dispos ???
Cette solution me semble un peu cracra quand même. Je débute sur Drupal, je m'attendais à un truc plus élégant ... Doit bien exister une manière "propre" d'ajouter du JS dans un type de contenu perso ...

Si ton script est "métier", c'est à dire s'il fait partie du coeur de fonctionnalité (indépendamment du thème), tu dois passer par un module (cf mon footer). Dans ce module tu ajoutes un hook_init qui ressemble à cela :

<?php
  
function mon_module_init() {
  
drupal_add_js(drupal_get_path("module", "mon_module")."/mon_script.js");
   }
?>

Etant entendu que ton script est dans le même dossier que le .module.

Après je mets cela dans le hook_init du module pour une raison que je défend ;-). En effet, certain préfère coller cela au moment où c'est nécessaire (par exemple dans un hook_nodeapi, au moment de la visualisation du noeud de type XXX). Perso je trouve cela contre-productif en terme de performances. En effet, Drupal au moment de la création de la page, prend tous les JS (idem pour les CSS au passage) et comprime le tout pour en faire un unique. Vu qu'un serveur apache proprement configuré GZIP ce genre de bidule, une tripotée de scripts devient un unique fichier zippé pour TOUS LE SITE. Une fois ce fichier dans le cache du navigateur, on n'en parle plus. En revanche, en mettant la déclaration du script ailleurs que dans hook_init, on oblige drupal à générer plein de fichier compressés, et autant de téléchargement pour le navigateur. Ce qui semblait une bonne optim, devient une perte de temps...

Bonsoir a tous
Quitte à utiliser un module, pourquoi pas JS injector?
http://drupal.org/project/js_injector
Ce module permet simplement de créer ses propres fichiers JS en contrôlant leur chargement selon l'url des pages.

Edit: Aucun rapport, mais comment est configuré l'heure du forum? je suis à paris et lors de ce post il est 20h25 et non 21h29 comme je le vois affiché en tant qu'heure de mon post...

@Benj Je sais pas pour roi, mais tous les sites que je peux réaliser ont au moins un module custom. Sinon j'aurais 100000 js_injector ou équivalent et un Drupal façon brouette pour un résultat qui répond à 80% du besoin :)

Donc le coup du drupal_add_js, c'est dans le module custom du site, avec le reste...

@adVid et Benj
Arrrêtez :) A vous entendre c'est un truc d'expert super compliqué les modules. On serait sous Joomla je dis pas (j'ai tenté, c'est sport !)... Mais sous Drupal...un module c'est juste un dossier, 1 fichier texte, et 1 fichier php qui peut même être vide... Autant dire que ça vaut le coup d'investir dans ce sens car une fois que l'on sait faire, on élimine énormément de modules trop compliqués pour le besoin (typiquement les *_injector ;-). Le seul investissement là dedans c'est de trouver le bon hook qui correspond au besoin.