我的网站上有一个具有特定类名的视图。我想知道在主题的template.php文件中,如何知道请求的页面中是否具有特定类名的视图。
这对我来说非常重要,因为当在页面中使用具有特定类名的视图(例如image-gallery)时,我需要包括特定的JavaScript和CSS。
我的网站上有一个具有特定类名的视图。我想知道在主题的template.php文件中,如何知道请求的页面中是否具有特定类名的视图。
这对我来说非常重要,因为当在页面中使用具有特定类名的视图(例如image-gallery)时,我需要包括特定的JavaScript和CSS。
Answers:
您可以使用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')
以防万一这对陷入困境的其他人很有用,就像我为将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代码。