你在这里


Views

Drupal网站用Views模板来替代Views PHP修改字段内容

James Qi 2016年10月20日 - 18:21 发布

  以前Drupal网站中遇到需要对Views的输出进行一些变换的时候,一般是通过安装Views PHP这个模块,在Views中添加Global PHP字段,在其中设置读取什么值、进行什么变换、输出什么内容,这个方式很早就开始用了,Drupal 6和Drupal 7都用过。但缺点是设置麻烦,还可能会引起负载的升高。

  最近在调试一个新的网站中就遇到数据量大的时候,服务器报500错误,甚至导致阿里云服务器死机的情况。检查后发现都是与Views相关,先安装了Views PagerLite来减少MySQL的Count指令,但依然有不少内存不足的报错。

  后来在Drupal官方网站上找到views-view-field.tpl.php的说明,按照这个来进行配置、修改,可以达到与Views PHP一样的效果,但不会一起负载增高,真是一个好办法!

  详细说明请看:views-view-field.tpl.php


  2016年11月11日补充原始模板代码为:

Drupal Views输出结果中去掉重复项的另类办法

James Qi 2015年12月25日 - 16:14 发布

  Drupal的Views设置中本来就有一个选项是用于去掉重复的,Drupal 6中叫做Distinct:

Defaults: Display only distinct items, without duplicates.
Distinct
This will make the view display only distinct items. If there are multiple identical items, each will be displayed only once. You can use this to try and remove duplicates from a view, though it does not always work. Note that this can slow queries down, so use it with caution.

  而在Drupal 7中这个选项是放在Advanced -> Query settings:Settings,这里面比Drupal 6还多了一个Pure Distinct子选项:

自由标签:

Drupal网站去掉Views中不是很必要的Sort

James Qi 2015年6月26日 - 15:27 发布

  Drupal网站的Views模块非常有用,我们一直用它来生成一些列表,包括node的列表、term的列表等。最近在搬迁一个系列网站到阿里云美国数据中心的服务器过程中,发现RDS的磁盘IOPS一直非常高影响了使用,经过仔细排查,发现造成堵塞的主要原因都是带sort的SQL语句使得不断生成大的临时文件,再把Devel打开,找到这句SQL所在的页面,从而发现是网站的node全列表views有问题,打开views编辑发现Sort一栏中有内容,而去掉Sort条件再报错、运行就发现极少出现原来的问题了。

  查了一些资料,在运行带有sort的select语句是需要产生临时文件,如果内存不够放置的话就需要写入到磁盘从而引起效率急剧下降,而我们的一些网站数据量很大,数据在几十万、几百万都有,这时临时文件也很大了,只有读写硬盘,因而让RDS的IOPS达到限制。

  分析了一下,这个sort其实不是很必要,只是把所有node列出来,不是必须进行按时间排序,于是在Views中去掉了sort项,然后持续几天的IOPS过高就解决了,我准备如果还是不解决的话,甚至把这个Views整个都删除掉,即使删除也不影响网站的核心功能,用户一般还是通过搜索引擎以及各种分类页或者搜索页进到内页的,成千上万的Views页面人工不可能翻页来查看。

自由标签:

一个Drupal网站Views消失的排查

James Qi 2015年4月29日 - 21:45 发布

  前一段时间发现分省的邮政编码系列网站首页常常会出现一个Views做的Block为空白的情况,例如北京邮政编码首页的“北京地市区县邮编”这一个Block里面没有内容,这样情况以前偶尔比较罕见会发生,例如几个月偶尔见到一次,但最近却成了经常的事情,每次重新清理该网站缓存会恢复,但1、2天后又出问题。

  我用阿里云的网站监控设置了对该站首页每隔5分钟读取一次,如果发现没有应该存在的内容就报警,连续几天夜间准点开始报警,先以为是cron运行的结果,但时间不对,后来发现是巡检程序读取head和content的时候偶尔会这样,但具体原因依然不清楚,还是清理缓存后恢复,不久又出错。sad

Drupal网站导出Views结果为CSV文件的办法

James Qi 2013年5月22日 - 16:03 发布

  Drupal网站中用Views可以显示需要的各种列表,有时希望把列表的结果保存为另外的文件,当结果数量很大(超过几十、几百)时,用人工复制粘贴的办法就不合适了,需要有自动批量处理的办法。尝试了2种办法可用:

1、从PHPMyAdmin导出

  昨天尝试了一个办法:在Views的设置中打开SQL语句显示,将语句复制出来,根据需要进行修改,然后再放到PHPMyAdmin中对应的数据库中运行,将得到的结果(也类似Views的结果)导出成CSV文件。这个过程有点麻烦,特别是需要对复制的SQL语句进行一些修改,最好能懂得一些SQL才好操作。优点是运行速度快、SQL语句可以做得很灵活强大;

自由标签:

Drupal中导出Views用于设立Module

James Qi 2012年3月19日 - 14:23 发布

  Drupal的Views是个好东西,能做出各种查询列表,基本上是我们网站的必备模块。
  在一些系列网站中,因为要在各个子网站都设置相同的Views,我们就用到Views的导出、导入功能,这样只需要在一个示范网站中设置好,然后export成代码的形式,再import到其它网站就可以,还是比较方便的。
  虽然一次性设置的时候导出、导入不麻烦,但如果要修改Views就比较麻烦了,我们以前是逐个网站修改,或者只修改示范网站,再在其它网站中删除旧Views、导入成新Views,如果需要反复修改,也算是比较麻烦了。
  Drupal 6中的Views Tools里面有个Bulk Export,可以将多个Views一次性导出,但因为以前不知道如何将批量导出的代码Import到其他网站,所以也没有使用,现在详细看说明,原来这些导出的代码是用于新建Module的,这也正符合我们的需要,前段时间就实验成功通过这样的办法新建模块来共享统一的Views设置。

自由标签:

Drupal网站Views生成页面Title改为变量的问题

James Qi 2012年1月31日 - 14:09 发布

  Drupal系统的Views插件确实有着非常强大的功能,能实现各种数据库查询工作而又不用编写程序代码,所以我们在建站过程中也在不少地方用到Views。

  用Views生成页面的时候,涉及到页面的Tilte,有多种情况记录如下:

自由标签:

为Drupal网站中的CCK字段在MySQL中添加添加索引来加速Views展示

James Qi 2011年12月25日 - 20:42 发布

  今年4、5月份在用Drupal搭建英文版中国邮编网站China Postal Code的过程中,为了让浏览者更方便、更习惯,采用了CCK字段+Views展示的扩展模块,并进行一系列的比较复杂的设置,例如多个computed计算字段、Views查询中嵌套多级查询,算是基本上能实现所希望的功能。

  但当时就发现在性能上有很多的问题,通过Devel模块的开启,可以查看到一些Views查询数据库所用的时间非常长,需要几十甚至几百秒,常常令服务器负载过高而影响网站访问。后来找了一个自动检测MySQL进程的小脚本,当发现超过限定值的进程时就自动kill掉,这个办法确实可行,但属于治标不治本,没有查到真实原因的情况下,不得已而为之,因为这样还会影响用户浏览和搜索引擎机器人的爬取。

  上个月在下半年搭建的新网站中添加了多种Views来方便提供给用户更多功能,但很快就发现与上面这个站说的情况一样,服务器负载明显升高,MySQL的消耗很大,一些查询需要的时间太长,同时有很多查询的时候,服务器就无法处理得过来了。当时没有办法,只有临时去掉了这些Views提供的功能,还用Squid对这些网址进行了拒绝,并在robots.txt中设置了不要收录这些网址。

大数据量Drupal网站的Views中慎用Relationships

James Qi 2011年11月29日 - 09:53 发布

  上周同事开始在多个子网站更改各项设置,特别是添加多个Views后,服务器负载持续攀升,也影响到服务器上的没有更改的网站,特别是几个数据量达到数十万、上百万的网站,已经连续出现首页报错的情况了。

  http://tx.bizdirlib.com/ 的首页主要由两部分组成:城市列表和行业列表,首页报错的时候,上半部分的城市列表还是可以正常显示的,只是下半部分的行业列表无法显示,错误提示信息也是与sic行业代码的查询有关。

  检查两个Views,城市列表的Views很简单,而行业列表的Views中采用了Relationships,以便查找行业代码对应的行业描述,本来行业总数只有5000左右,但每个行业都要到数十万公司数据中去查找行业代码对应的描述,再用Distinct来去掉重复,从PHPMyAdmin中看到语句中有好些left join,这就是负担所在了!

页面

订阅 RSS - Views