Saltar al contenido

Drupal – ¿Cómo agrego JavaScript específico para una vista?

Solución:

Podrías usar el template_preprocess_views_view() gancho para hacer esto:

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');
  }
}

Tenga en cuenta que también puede verificar la visualización específica de la vista usando:

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

Debería poder verificar una clase CSS personalizada como esta:

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

Puede utilizar la función views_get_page_view para averiguar qué vista se muestra en la página. Devuelve el objeto de vistas. Tenga en cuenta que en el fragmento de código a continuación debe compararlo con el nombre legible por máquina de las vistas, pero, por supuesto, puede escribir su propia comparación basándose en el objeto de vista devuelto por views_get_page_view

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

En caso de que esto sea útil para cualquier otra persona que se encuentre con esta pregunta, buscando como lo hice yo adjuntar JavaScript a una vista de Drupal. En términos de D7 y Vistas 3.7, lo siguiente funcionó mejor para mí:

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);
    }
  }
}

Esto fue beneficioso ya que quería mantener el código dentro de mi módulo, en lugar del tema, porque las mejoras aportadas por JavaScript no tenían nada que ver con la apariencia visual.

NOTA: Obviamente HOOK debe reemplazarse con el nombre de su módulo, en ambas ubicaciones, y CLASS GOES HERE también debe reemplazarse con la clase que está buscando.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *