Ajouter JavaScript dans un type de contenu spécifique

9

Je voudrais savoir quelle est la meilleure façon d'ajouter un fichier JavaScript dans une page spécifique en fonction du type de contenu. Par exemple, je veux ajouter ceci:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

Jusqu'à présent, ce que j'ai fait est d'utiliser cette méthode pour ajouter à mon type de contenu spécifique. Pour le type de contenu map_page, j'ajoute les deux lignes de code ci-dessous dans la page - map_page.tpl.php.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

Y a-t-il une autre meilleure façon? si possible peut donner un exemple, actuellement pas vraiment bien compris ...

Arkchong
la source

Réponses:

6

Je ne peux pas commenter l'équivalent Drupal 7 approprié, mais dans les sites Drupal 6, je le fais dans un template_preprocess_page .

J'aurai une certaine logique pour prendre la décision (sur la base arg()ou à page_manager_get_current_page()partir de panneaux), puis ajouter $vars["scripts"]le script externe. Je préfixe pour ne pas rencontrer de problèmes de dépendance avec les scripts locaux.

Je vais également parfois configurer une nouvelle région appelée $global_scriptspour des idées comme Google API et SWFObject que je veux charger à partir d'un CDN, et cela est imprimé avant $scriptsdans le modèle de page.

Pour être honnête, bien que j'aie normalement tous les JS sur toutes les pages pour que les fichiers soient mis en cache.

mpdonadio
la source
6

Puisque Drupal ne vous laissera pas redéfinir template_preprocess_node(car il est déjà défini dans node.module), j'ai ajouté une fonction de préprocesseur dans mon module personnalisé:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

J'ai utilisé preprocess_nodeplutôt que preprocess_pageparce qu'il est plus facile d'accéder au type de nœud. Si vous référencez réellement un fichier javascript, il sera automatiquement mis en cache ( voir la section Paramètres ).

Juke-box
la source
2

vous pouvez également utiliser hook_node_view pour vérifier le type de contenu, puis ajouter les js comme vous le faites déjà.

OU

Si vous avez un champ qui produit les informations qui utiliseront le JS, utilisez un préprocesseur pour ajouter les js, donc les js inclus dépendent du champ affichant la carte plutôt que du type de contenu.

Jeremy French
la source
0

Une solution simple consiste à simplement placer les add_js:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

dans la page / le noeud template.php.

Nevos
la source