web-dev-qa-db-fra.com

Comment ajouter du JavaScript spécifique à une vue?

J'ai une vue dans mon site qui a un nom de classe spécifique. Je veux savoir, dans le fichier template.php d'un thème, comment je peux savoir si une vue avec un nom de classe spécifique est disponible dans la page demandée.

C'est très important pour moi car j'ai besoin d'inclure JavaScript et CSS spécifiques, lorsqu'une vue avec un nom de classe spécifique (comme galerie d'images) est utilisée dans une page.

29
Mehrdad201

Vous pouvez utiliser le crochet template_preprocess_views_view() pour ce faire:

function THEME_preprocess_views_view(&$vars) {
  $view = &$vars['view'];
  // Make sure it's the correct view
  if ($view->name == 'your-view-name') {
    // add needed javascript
    drupal_add_js(drupal_get_path('theme', 'your-theme') . '/your-js.js');
    // add needed stylesheet
    drupal_add_css(drupal_get_path('theme', 'your-theme') . '/your-css.css');
  }
}

Notez que vous pouvez également vérifier l'affichage spécifique de la vue en utilisant:

if ($view->name == 'your-view-name' && $view->current_display == 'your-display-id') {
  // include javascript & css here
}

Vous devriez pouvoir rechercher une classe css personnalisée comme celle-ci:

if ($view->name == 'your-view-name' && $view->display[$view->current_display]->display_options['css_class'] == 'your-css-class') {
   // include javascript & css here
}
42
Cyclonecode

Vous pouvez utiliser la fonction views_get_page_view pour savoir quelle vue est diffusée sur la page. Il retourne l'objet vues. Notez que dans l'extrait de code ci-dessous, vous devez comparer avec le nom lisible par machine de vues, mais bien sûr, vous pouvez écrire votre propre comparaison en fonction de l'objet de vue retourné par views_get_page_view

function YOURTHEMENAME_preprocess_page(&$variables) {
    $view = views_get_page_view();
    if($view->name == 'YOURVIEW') {
    //Do what ever you want 
    }
8
Alex Petrov

Juste au cas où cela serait utile à quiconque tomberait sur cette question, en recherchant comme je l'ai fait pour attacher JavaScript à une vue Drupal En termes de D7 et de vues 3.7, les éléments suivants ont fonctionné le mieux pour moi:

function HOOK_views_pre_render ( &$view ) { 
  /// check to make sure the view has a classname
  if ( $view->display_handler && !empty($view->display_handler->options['css_class']) ) {
    $cln = $view->display_handler->options['css_class'];
    $cls = 'CLASS GOES HERE';
    /// test that the classname contains our class
    if ( preg_match('/(^|\s+)' . preg_quote($cls) . '(\s+|$)/i', $cln) ) {
      /// build the path to the js, which is local to my module, js/view.js
      $sep = DIRECTORY_SEPARATOR;
      $dir = rtrim(drupal_get_path('module', 'HOOK'), $sep);
      $pth = "{$dir}{$sep}js{$sep}view.js";
      drupal_add_js($pth);
    }
  }
}

C'était bénéfique car je voulais garder le code dans mon module, plutôt que le thème - parce que les améliorations apportées par le JavaScript n'avaient rien à voir avec l'apparence visuelle.

REMARQUE: Évidemment, HOOK doit être remplacé par le nom de votre module, aux deux emplacements, et CLASS GOES HERE doit également être remplacé par la classe que vous recherchez.

6
Pebbl

Si vous êtes sur drupal 6 ou 7, vous pouvez également inclure des actifs javascript avec le module context context add assets. Ce qui nécessite un contexte mais vous serez assuré qu'il sera toujours inclus lorsque le la vue est en cours de rendu.

https://drupal.org/project/context_addassets

Depuis la page projet du module:

Avez-vous déjà voulu inclure javascript ou css lors du rendu d'une vue ou d'un bloc particulier? Ou avez-vous déjà voulu inclure javascript ou css uniquement pour la première page sans avoir à écrire de code?

Les ajouts de contexte vous permettent de le faire. Il a une interface utilisateur facile à utiliser pour vous permettre de faire tout cela sans écrire de code. Parce qu'il utilise ctools, tout cela est également exportable.

4
chrisjlee

Écrivez du code JavaScript qui recherche une classe spécifique dans la vue, à l'aide de jQuery hasClass () , et incluez votre fichier JavaScript lorsque la condition est remplie.

Une autre façon consiste à mettre un modèle pour votre vue et à ajouter du code JavaScript via ce modèle en utilisant drupal_add_js () .

2
niksmac