web-dev-qa-db-ja.com

hook_preprocess_page():ビューページを通知する方法?

いくつかのjavascriptおよびcssファイルをビューページにのみ挿入する必要があるカスタムモジュールを書いています。

私はhook_preprocess_pageを使用していますが、現在のページがビューからのものかどうかわかりません:

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

テンプレートファイル(page-my_view_page_path.tpl.php)を使用できることはわかっていますが、jsと追加のcssは、モジュールが有効な場合にのみ含める必要があります。 このため、これをモジュールコード内に直接保持したい

アイデア?

10
Strae

views_get_page_view() は、もしあれば、現在どのページビューが使用されているかを調べます。 NULLを返す場合、現在のページはビューのページではありません。

ただし、drupal_add_js()drupal_add_css()およびhook_preprocess_page()を使用すると、変数_$script_および_$style_変数がすでに使用されているため、期待どおりに機能しません template_preprocess_page() によって設定されます。ビューのテンプレートの前処理(Jeremy Frenchの回答を参照)は、おそらくCSSとJavaScriptを追加するためのより良い場所です。

12
Pierre Buyle

ビューのプリプロセッサ には長いスレッドがあります。 このコメント は私には非常にシンプルに見えます。

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

あなたがhook_preprocess_page()を使用している場合、定義により、ビューにはページ表示とメニューパスがあり、これらは一意でなければならないので、これを行うことができます:

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

このページに引数が渡されるため、_$_GET['q']_の一部が必要な場合は、代わりにDrupalのarg()関数を使用してください。

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

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

8
Greg

私にとってこれはうまくいきます:

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

特定のコールバックにJSまたはCSSを追加する場合は、 hook_page_build() を使用することをお勧めします。

2
Simon Poulston