it-swarm-eu.dev

hook_preprocess_page (): jak zjistit stránku zobrazení?

Píšu vlastní modul, který potřebuje vložit některé soubory javascript a css pouze na stránku Zobrazení.

Im using hook_preprocess_page, ale nemohu říct, zda je aktuální stránka z pohledu:

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

Vím, že bych mohl použít soubor šablony (page-my_view_page_path.tpl.php), ale js a extra css musí být zahrnuty pouze pokud je můj modul povolen; takže si to ráda ponechám přímo uvnitř kódu modul.

Nápady?

10
Strae

views_get_page_view() zjistí, co se v současné době používá, pokud existuje, zobrazení stránky. Pokud vrátí hodnotu NULL, pak aktuální stránka není stránka zobrazení.

Ale použití drupal_add_js() a drupal_add_css() v hook_preprocess_page() nebude fungovat podle očekávání, protože proměnné $script A $style Mají již bylo nastaveno template_preprocess_page() . Předzpracování šablony pohledů (viz odpověď Jeremyho Frencha) je pravděpodobně lepším místem pro přidání CSS a JavaScriptu.

12
Pierre Buyle

Na preprocesory pro zobrazení je zde dlouhá nit. Tento komentář vypadá mi velmi jednoduše.

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

Pokud se nacházíte v hook_preprocess_page (), pak podle definice má vaše zobrazení zobrazení stránky a cestu k nabídce, která musí být jedinečná - můžete tak učinit:

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([...]);
    }
}

Pokud máte na tuto stránku předané argumenty, takže potřebujete části $_GET['q'], Udělejte to místo toho pomocí funkce arg() Drupal:

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

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

8
Greg

Pro mě to funguje:

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

Pokud přidáváte JS nebo CSS do konkrétního zpětného volání, raději použijte hook_page_build() :

2
Simon Poulston