サイトに特定のクラス名を持つビューがあります。テーマのtemplate.phpファイル内で、要求されたページで特定のクラス名のビューが利用可能かどうかを知る方法を知りたいです。
特定のクラス名を持つビュー(イメージギャラリーなど)がページで使用される場合、特定のJavaScriptとCSSを含める必要があるため、これは私にとって非常に重要です。
サイトに特定のクラス名を持つビューがあります。テーマのtemplate.phpファイル内で、要求されたページで特定のクラス名のビューが利用可能かどうかを知る方法を知りたいです。
特定のクラス名を持つビュー(イメージギャラリーなど)がページで使用される場合、特定の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
}
if($view->name == 'your-view-name' && $view->display_id == 'your-display-id')
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 Viewに添付するために行ったように、この質問に出くわした他の人にとってこれが便利な場合に備えて。D7&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
置き換える必要があります。また、検索対象のクラスに置き換える必要があります。
HOOK_views_pre_process
(api.drupal.org/api/views/views.api.php/7)はありません。これを使用する理由を意味している場合を除きますTHEME_preprocess_views_view
。コードの変更を追加したい場合。HOOK_views_pre_render
モジュールからフックすることができますがTHEME_preprocess_views_view
、テーマ/テンプレートファイルに入れる必要があります。必要にHOOK_views_post_render
応じて使用することもできます。
THEME_preprocess_views_view
そうです...はい...私はhook_preprocess_views_view
以前にモジュールで行ったことがあると確信しています。
drupal 6または7を使用している場合は、モジュールコンテキストにアセットを追加するJavaScriptアセットを含めることもできます。これにはコンテキストが必要ですが、ビューがレンダリングされるときに常にコンテキストが含まれることを保証します。
https://drupal.org/project/context_addassets
モジュールのプロジェクトページから:
特定のビューまたはブロックがレンダリングされているときにjavascriptまたはcssを含めたいと思ったことはありませんか?または、コードを記述することなく、フロントページだけにJavaScriptまたはCSSを含めたいと思ったことはありませんか?
コンテキスト追加アセットにより、これを行うことができます。使いやすいUIを使用して、コードを記述せずにすべてを実行できます。ctoolsを使用しているため、これもすべてエクスポート可能です。
jQueryのhasClass()を使用して、ビュー内の特定のクラスを検索するJavaScriptコードを記述します、条件が満たされたときにJavaScriptファイルを含めます。
別の方法は、ビューにテンプレートを配置し、drupal_add_js()を使用してそのテンプレートを介してJavaScriptコードを追加することです。