it-swarm-es.com

hook_preprocess_page (): ¿cómo decir una página de visitas?

Estoy escribiendo un módulo personalizado que necesita insertar algunos archivos javascript y css solo en una página de Vistas.

Estoy usando hook_preprocess_page, pero no puedo decir si la página actual es de una vista:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if([view page])
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
        // Rebuild scripts 
        $scripts = drupal_get_js();
        $vars['scripts'] = $scripts;
        // Same for css
    }
}

Sé que podría usar un archivo de plantilla (page-my_view_page_path.tpl.php), pero js y css adicionales deben incluirse solo si mi módulo está habilitado; así que me gusta mantener estas cosas directamente dentro del código de mi módulo.

Ideas?

10
Strae

views_get_page_view() descubre qué vista de página, si hay alguna, está actualmente en uso. Si devuelve NULL, la página actual no es una página de visitas.

Pero usar drupal_add_js() y drupal_add_css() en una hook_preprocess_page() no funcionará como se esperaba porque las variables $script Y $style Tienen ya ha sido configurado por template_preprocess_page() . El preprocesamiento de plantillas de Views (vea la respuesta de Jeremy French) es probablemente un mejor lugar para agregar su CSS y JavaScript.

12
Pierre Buyle

Hay un hilo largo en preprocesadores para vistas aquí. Este comentario me parece muy simple.

function mymodule_theme_registry_alter(&$theme_registry) {
  //dpm($theme_registry);
  $theme_registry['views_view__YOUR_VIEW_NAME_HERE']['preprocess functions'][] = 'mymodule_preprocess_func';
}

// now go on and play with your new preprocess function
function mymodule_preprocess_func(&$vars) {
  // etc
}
11
Jeremy French

Si está en un hook_preprocess_page (), entonces, por definición, su vista tiene una visualización de página y una ruta de menú, que debe ser única, por lo que puede hacer esto:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if($_GET['q'] == 'my/view/path')
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
    }
}

Si tiene argumentos que se pasan a esta página, por lo que necesita partes de $_GET['q'], Entonces haga esto con la función arg() de Drupal:

if(arg(0) == 'my' && arg(1) == 'view' && arg(2) == 'path')

http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/arg

8
Greg

Para mí este funciona:

function MYMODULE_preprocess_page(&$vars) {
  $view = (array)views_get_page_view();
  if (!empty($view)) {
    // do stuff
  }
}
3
leymannx

Si está agregando JS o CSS a una devolución de llamada específica, es mejor usar hook_page_build() :

2
Simon Poulston