Drupal系统的Views插件确实有着非常强大的功能,能实现各种数据库查询工作而又不用编写程序代码,所以我们在建站过程中也在不少地方用到Views。
用Views生成页面的时候,涉及到页面的Tilte,有多种情况记录如下:
- 如果是固定的标题就很简单,设定Views的标题就可以了;
- 如果是网址中带有变量就可能需要页面标题也变动,这时候可以在Views的标题中加入%1这样的变量;
- 网站中带有变量的情况下,还可以在Views中的Arguments处设置Title,其中加入%1、%2这样的变量,这里的设置可以覆盖Views的Title设置;
- 如果希望Title不仅仅是直接嵌入变量,而是需要根据变量进行一定的变换,可以在Header中嵌入PHP程序,使用drupal_set_title($title);这样的语句来设置页面标题。
注意在最后一种情况下,不能设置Views的Caching来缓存Rendered output,Query results可以设置为6天,而需要把Rendered output设置为Never,否则刷新页面的时候就不重复执行Header中的drupal_set_title语句,代之用Views中设置的Title从而引起错误。之前这个问题困扰了我好长时间,直到今天仔细检查才解决。
2017年8月15日补充:drupal 6里面有这个问题,但drupal 7有些不同,我又刚刚试了一下,在views的header里面用drupal_set_title是无效的,breadcrumb也是在header里面设置无效,我们在drupal 7里面都是另外加block来设置title和breadcrumb的。所以Drupal 7里面是可以把Rendered output,Query results都设置为6天,具体详见《Views增加缓存降低数据库服务器负载》。
2017年8月17日补充:Drupal 7的Views里面Header添加Global: Text area (Provide markup text for the area.)使用PHP函数drupal_set_title($title); 无效,需要改为Header添加Global PHP (Use PHP code to construct the output of an area.,使用这种格式的内容需要安装Views PHP模块)使用PHP函数$view->set_title($title); 才行,这时用drupal_set_breadcrumb($breadcrumb); 也是有效的。
2017年8月18日补充:同事提醒后再次详细查看,如果Rendered ouput缓存打开的话,只有print $output;的内容可以被正常缓存下来,而使用PHP实现title/meta keywords/meta description设置的情况就不会重新执行了,导致除了第一次访问的时候title/meta keywords/meta description正确以外,刷新访问就都不正确了,与是否登录无关。
评论