サイトに特定のクラス名を持つビューがあります。テーマのtemplate.phpファイル内で、特定のクラス名のビューがリクエストされたページで使用できるかどうかを知りたいのですが。
特定のクラス名(image-galleryなど)のビューがページで使用される場合、特定のJavaScriptおよびCSSを含める必要があるため、これは私にとって非常に重要です。
template_preprocess_views_view()
フックを使用してこれを行うことができます:
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');
}
}
以下を使用して、ビューの特定の表示を確認することもできます。
if ($view->name == 'your-view-name' && $view->current_display == 'your-display-id') {
// include javascript & css here
}
次のようなカスタムcssクラスをチェックできるはずです。
if ($view->name == 'your-view-name' && $view->display[$view->current_display]->display_options['css_class'] == 'your-css-class') {
// include javascript & css here
}
Views_get_page_view関数を使用して、ページで提供されているビューを確認できます。ビューオブジェクトを返します。以下のコードスニペットでは、ビューの機械可読名と比較する必要がありますが、もちろん、views_get_page_viewによって返されるビューオブジェクトに基づいて独自の比較を書くこともできます。
function YOURTHEMENAME_preprocess_page(&$variables) {
$view = views_get_page_view();
if($view->name == 'YOURVIEW') {
//Do what ever you want
}
これがこの質問に出くわした誰かに役立つ場合に備えて、JavaScriptをDrupal ViewD7&Views 3.7に関して、以下が私にとって最もうまくいきました:
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);
}
}
}
これは、テーマではなくコードをモジュール内に留めておきたいという点で有益でした。JavaScriptによってもたらされる拡張機能は、視覚的な外観とは関係がないためです。
注:明らかに
HOOK
は両方の場所でモジュール名に置き換え、CLASS GOES HERE
も、検索するクラスに置き換える必要があります。
drupal 6または7を使用している場合は、javascriptアセットをモジュールコンテキスト追加アセットに含めることもできます。これには、コンテキストが必要ですが、残りの場合は、ビューがレンダリングされています。
https://drupal.org/project/context_addassets
モジュールのプロジェクトページから:
特定のビューまたはブロックがレンダリングされているときにjavascriptまたはcssを含めたいと思ったことはありますか?または、コードを記述せずにフロントページのみにJavaScriptまたはCSSを含めたいと思ったことはありませんか?
コンテキスト追加アセットにより、これを行うことができます。使いやすいUIを備えているため、コードを記述せずにすべてを実行できます。 ctoolsを使用しているため、これもすべてエクスポート可能です。
JQueryの hasClass() を使用して、ビュー内の特定のクラスを検索するJavaScriptコードを記述し、条件が満たされたときにJavaScriptファイルを含めます。
もう1つの方法は、ビューのテンプレートを配置し、そのテンプレートから drupal_add_js() を使用してJavaScriptコードを追加することです。