hook_preprocess_page():ビューページを表示する方法は?
-
16-10-2019 - |
質問
ビューページにのみ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_view_page_path.tpl.php)を使用できることはわかっていますが、JSと追加のCSSは、モジュールが有効になっている場合にのみ含める必要があります。 だから私はこのものを私のモジュールコード内に直接保持するのが好きです.
アイデア?
解決
views_get_page_view()
ページビューが現在使用されているものを見つけます。 nullを返す場合、現在のページはビューのページではありません。
しかし、使用しています drupal_add_js()
と drupal_add_css()
で hook_preprocess_page()
変数のため、予想どおりに機能しません $script
と $style
変数はすでに設定されています template_preprocess_page()
. 。ビューのテンプレート前処理(Jeremy Frenchの回答を参照)は、おそらくCSSとJavaScriptを追加するのに最適な場所です。
他のヒント
長いスレッドがあります ビュー用のプリプロセッサ ここ。 このコメント 私にはとてもシンプルに見えます。
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
}
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
私にとってこれはうまくいきます:
function MYMODULE_preprocess_page(&$vars) {
$view = (array)views_get_page_view();
if (!empty($view)) {
// do stuff
}
}
特定のコールバックにJSまたはCSSを追加している場合は、使用する方が良い hook_page_build()
: