hook_preprocess_page():如何讲述视图页面? -- views 领域 和 7 领域 和 theming 领域 和 javascript 领域 drupal 相关 的问题

hook_preprocess_page(): how to tell a views page?


11
vote

问题

中文

im写一个需要在视图页面中插入一些javascript和css文件的自定义模块。

im使用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; 所以我喜欢将这件事直接保留在我的模块代码中

想法?

英文原文

Im writing a custom module that need to insert some javascript and css files only in a Views page.

Im using hook_preprocess_page, but I can not tell if the current page is from a view:

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

I know i could use a template file (page-my_view_page_path.tpl.php), but the js and extra css must be included only if my module is enabled; so I like to keep this things directly inside my module code.

Ideas?

           
         
         

回答列表

12
 
vote
vote
最佳答案
 

views_get_page_view() 查找当前正在使用的,如果有的话。如果返回null,则当前页面不是视图"页面。

但使用 drupal_add_js() drupal_add_css() hook_preprocess_page() 不会按预期工作,因为变量 $script <?php <div class="content"> hide($content['field_tags']); print render($content); </div> <div class="terms"> print render($content['field_tags']); </div> ?> 0 变量已经由 <?php <div class="content"> hide($content['field_tags']); print render($content); </div> <div class="terms"> print render($content['field_tags']); </div> ?> 1 。查看模板预处理(参见Jeremy French的答案)可能是添加CSS和JavaScript的更好的地方。

 

views_get_page_view() finds out what, if any, page view is currently in use. If it returns NULL, then the current page is not a views' page.

But using drupal_add_js() and drupal_add_css() in a hook_preprocess_page() won't work as expected because the variable $script and $style variables have already been set by template_preprocess_page(). Views's template preprocessing (see Jeremy French's answer) is probably a better place to add your CSS and JavaScript.

 
 
     
     
11
 
vote

在 preprocessors for视图中有一个冗长的线程。 此评论对我来说非常简单。

  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 }   
 

There is a lengthy thread on preprocessors for views here. This comment looks very simple to me.

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

如果您处于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

 

If you're in a hook_preprocess_page() then, by definition, your view has a page display and a menu path, which must be unique - so you can do this:

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

If you have arguments being passed to this page, so you need parts of $_GET['q'], then do this instead with Drupal's arg() function:

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

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

 
 
   
   
3
 
vote

对我来说,这个有效:

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

For me this one works:

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

如果将JS或CSS添加到特定的回调,则更好地使用 hook_page_build()

 

If you are adding JS or CSS to a specific callback then better to use hook_page_build():

 
 

相关问题

3  在排除当前显示的节点的视图中使用哪些参数?  ( What argument to use in views that excludes the node currently being displayed ) 
例如:如果您的视图生成了内容类型X的节点列表,您如何使该列表排除当前显示的节点? ...

5  视图幻灯片VS列表视图+ jQuery Cycle Lite?  ( Views slideshow vs list viewjquery cycle lite ) 
在我的工作站主页上的旋转图像是以列表格式的视图创建。我正在使用 jquery循环Lite 插件,用于旋转效果。 CycliT.Lite.js文件在我的主题的.info文件中的脚本数组中设置,页面中有一点代码.TPL.php检查这是否是主页,如果是,则设置旋转器。< / p> 现在我正在第二个旋转器用于另一个部分,我一...

2  gmap视图模块 - 弹出窗口太大了  ( Gmap views module popups are too big ) 
我正在使用gmap模块及其视图对应。我拥有的问题是,我正在使用自定义文本字段来显示以我从查询中删除的HTML包裹的字段。但是,弹出窗口不会正确尺寸;它最终太大了。这是我的自定义文本字段的代码: <div id="col1"> [field_thtr_img_fid] </div> <div id="col2"...

1  自定义SQL:NodeReference Joins和最新视频  ( Custom sql nodereference joins and latest vid ) 
我有一个构成自定义SQL查询的时间。 查询有多个Nodereference,需要返回最新的节点修订版。 我理解得很好,但由于某种原因,返回最新版本的额外复杂性正在绊倒我。 我宁愿通过创建视图并以编程方式执行它们,仅仅因为 WHERE 条款的复杂性,就会以编程方式执行它们。 我已经尝试翻译等同的视图的输出,但是对视图粘...

13  构建视图过滤器  ( Building a views filter ) 
我想为我构建的自定义模块构建过滤器,并与视图集成。实质上,该模块允许您定义不同节点之间的关系类型。我想为此创建一个过滤器,以便我可以显示某种关系的节点。 我找不到任何描述过滤器更详细地描述过滤器的文档,并向它们解释各个部分。在这方面,API文档是可怕的。 任何人都可以在详细建筑视图过滤器上建立一个很好的资源/文章? ...

1  如何在网站的每页上使用视图筛选表单创建块?  ( How to create a block with views filter form available on each page of the site ) 
这适用于一个小房地产局的网站。 我有一个 property_offer 内容类型设置和优惠类型词汇,有4个术语(购买,销售,卖出租赁和承担租约)。然后我已经创建了一个与页面显示的视图,对于网站的首页,它列出了所有优惠,还有4个术语中的每一个页面。 如何为此视图创建公开的过滤器,这必须作为块可用,以便我可以将其放在站点...

4  如何控制来自视图内容窗格的“更多”链接,以指向Biblio过滤页面  ( How do i control the more link from a views content pane to point to a biblio ) 
我正在使用drupal 6.我正在尝试创建一个查看窗格,列出匹配特定术语的三个Biblio项,然后提供与使用相同术语过滤的更多项目的链接。 Biblio允许我使用 biblio/term/term_name 很好地访问这些项目。有没有办法控制视图提供的 more 链接,以便它指向这个位置? ...

3  使用有机组时是否可以创建“元论坛”视图?  ( Is it possible to create a meta forum view when using organic groups ) 
我们正在使用有机组的Drupal 6.x。这些组具有非常不同的用户和权限集,每个组都有一个论坛。 我想知道是否有一种"meta-forum" 视图,即用户拥有访问权限的所有不同论坛的一个视图,由组组织。 我看了一下为此配置一个视图,而我能够在所有订阅组中的最新论坛条目的列表中获取内容,我无法获得"论坛类型" 视图我在...

3  列出与节点参考字段有关的书籍概要  ( List outline of books related to another book by a node reference field ) 
我正在使用具有四种内容类型的书模块:a,b,c和d。 a是子页面的内容类型,其余的是在书概述中允许。 我还有一个节点参考字段,允许用户选择与他们正在创建的类型的类型的节点。 我正在尝试使用视图来显示与某个类型的节点相关的所有节点,并显示这些相关节点的轮廓。 e.g。查看书A.1相关主题及其轮廓: 书a.1 书...

6  什么是视图3的有效优化技术?  ( What are effective optimization techniques for views 3 ) 
我一直在进行一点我正在处理的网站上,这是广泛使用视图的。 即使使用视图缓存,仍然占用处理时间的2/3。是否有最佳的练习方法来加快视图,或者已知导致性能点击的事物。 我应该添加视图是solr视图,因此这是一个大多数关于视图架构的问题,而不是优化查询。 已尝试使用APC,但它没有更改执行时间。 ...

6  我可以使用简单的XML来馈送视图吗?  ( Can i use simple xml to feed views ) 
我想使用视图的力量来处理我的数据,这是一个只有网格resp table 的简单XML。 <list> <listpos id="12312"> <foo>attr1</foo> <bar>attr bar</bar> ... </listpos> <listpos id="12...

1  “节点:创建的一天”不匹配,不反映实际创造的一天  ( Node created day mismatched not reflecting the actual created day ) 
视图版本:7.x-3.0-alpha1 我正在尝试创建一个博客存档视图,如博客/ yyyy / mm / dd,其中博客/ 2011/03/10应该显示2011年3月10日在2011年创建的所有帖子。但是,页面博客/ 2011/03 / 03/10 实际上显示了在 2011上创建的所有帖子,3月11日,11th ,...

4  在模块中覆盖视图表布局  ( Overriding a view table layout in module ) 
我正在尝试从我的模块中覆盖视图表。我无法找到参数的假设是什么,并以什么顺序(对于我的hook_theme func)。我从视图/主题复制了主题文件,没有修改。有谁知道出现了什么问题,以及争论值应该是什么? 我的主题配置目前: 'views_view_table__opportunities_mentions' =...

4  如何在搜索结果中返回视图的内容?  ( How to return a views content in search results ) 
我们有一个页面显示包含两个或多个节点的视图,但是在搜索将与这些节点有关的关键字时,返回仅与各个节点的链接。我们真正想要的只是链接到要返回的视图的页面显示,但它没有显示在结果列表中。 我正在寻找通过自定义模块缓存的视图并索引缓存的内容,但我想知道是否有人遇到这种情况并可以分享他们的解决方案? 编辑:澄清了。 ...

2  如何使用“节点”行样式创建节点修订视图?  ( How to create a node revision view with a node row style ) 
是可以使用"节点" 行样式创建节点修订视图? 这似乎不是视图界面中的选项。 "字段" 是为此类型的视图提供的唯一选项。有没有理由,为什么这不是技术上可能或者目前没有实施的? ...

11  删除批量评论  ( Deleting comments in bulk ) 
如何立即删除所有评论?我已经看到了如何用节点和bulkdelete模块,如何删除给定内容类型的所有节点? 但我正在寻找类似的评论解决方案。 我正在寻找一个不留在数据库中的任何伪影的解决方案。是批量操作的最佳解决方案吗? ...

2  我可以使用具有公开表单的视图字段处理程序,或具有pre_query的过滤器处理程序?  ( Can i have a views field handler with an exposed form or a filter handler with ) 
它基本上是标题,但这是问题: 我正在尝试创建一种方法来允许用户查看视图来控制哪个列可见。如果我可以在正确的地方呼叫,这不是很难。具体来说,我需要在三个地方调用: 在某种配置窗格中 暴露形式 在pre_render函数中 本地处理程序和筛选器处理程序将获得配置窗格。但只有过滤器处理程序会影响曝光的表单,只有现场...

7  在视图中自定义第一个项目  ( Customising the first item in a view ) 
作为我的主页上的块,我正在尝试输出: <ul> <li><a><img><p>Node 1</p></a></li> <li><a>Node 2</a></li> <li><a>Node 3</a></li> <li><a>Node 4</a></li> </ul> 每个&lt; li&gt...

3  是暴露于观点的分类系统吗?  ( Are taxonomy fields exposed to views ) 
我正在尝试创建一个具有分类参考字段的节点的视图。我可以获得分类学术语,但没有看到我创造的分类领域暴露于观点。谷歌搜索不会透露其他人具有同样问题。我缺少我的鼻子下的东西吗? ...

1  显示多个“未使用”视图  ( Multiple unused views displays ) 
我在drupal中创建了一个大量定制的网站。我想用视图用作具有多个选项的页面的数据源,其中每个选项对应于视图中的不同显示。我想要使​​用视图的原因是它们可以通过UI轻松配置,因此如果需要,它们易于调整/更改。 不幸的是,似乎我无法创建一个没有某种形式的副作用的视图的显示(即页面显示将创建一个新页面)。有没有人有任何明...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.