web-dev-qa-db-fra.com

Ajouter JavaScript dans un type de contenu spécifique

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, c'est 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 ...

9
arkchong

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

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

Je vais aussi parfois créer une nouvelle région appelée $global_scripts pour des idées comme l'API Google et SWFObject que je veux charger à partir d'un CDN, et cela est imprimé avant $scripts dans 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.

6
mpdonadio

Puisque Drupal ne vous permettra pas de 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_node plutôt que preprocess_page car 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 ).

6
Jukebox

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

OR

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

2
Jeremy French

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.

0
Nevos