本人从2010年开始使用Drupal,比此前使用的MediaWiki更符合通用的建站要求,Drupal对多语言、多站点的支持也是我选择它的重要因素。从最开始的6.x到7.x再到8.x,我一直都在使用,在这过程中需要修改模板、自建模块,也学会了PHP以及其它一些技术。在本博客中我也记录了很多日常使用Drupal中遇到的问题、解决的办法,希望对其他使用Drupal的朋友有所帮助。

这是 Drupal 分类的页面,点击下面标题查看详细文章内容:
本人从2010年开始使用Drupal,比此前使用的MediaWiki更符合通用的建站要求,Drupal对多语言、多站点的支持也是我选择它的重要因素。从最开始的6.x到7.x再到8.x,我一直都在使用,在这过程中需要修改模板、自建模块,也学会了PHP以及其它一些技术。在本博客中我也记录了很多日常使用Drupal中遇到的问题、解决的办法,希望对其他使用Drupal的朋友有所帮助。

在Drupal网站有时候有多个内容类型之间需要互相连接,例如内容类型company中的字段field_address,需要查找内容类型location中field_street相同的node,然后在company的显示模板中field_address做一个指向location中这个node的链接。
在Drupal 7中可以通过Entity查询来实现,不过因为location中的field_street可能有很多是重复的,我们只能取其一,就可以在查询中限制只找到第一个range(0,1),具体代码如下:
$address = $f
几年前刚接触Drupal的时候,为了让显示的内容更丰富、也便于做Views、便于内部搜索,在Drupal 6中曾经使用过Computed Field(需要设置计算结果保存到数据库才能进行Views、搜索索引等工作),也就是一种可以嵌入PHP代码来实现计算、变换的字段,这个确实有很大的灵活性。
不过随着对Drupal的了解,让显示的内容更丰富其实只需要修改模板,便于做Views、便于内部搜索也可以做成固定的字段,只要事先对需要导入的文本进行一些处理就可以,在Drupal 7里面就基本没有用过这种字段了。
Drupal 8在2015年11月
早在几年前我们就开始赶移动Web的大潮了,2011年就有“公司内部技术讲座:云计算与移动互联网、移动手机网站、搜索引擎优化”,然后“再次尝试Drupal搭建手机版网站”,也进行了“MediaWiki网站添加手机版网站”,在这方面算是积累了不少经验。一直到现在依然在采取电脑版+手机版两种版本的方式来发布网站。
不过在这中间也了解到另外一种方式和趋势:响应式设计网站,Google早就在推荐这种方式,AdSense也有配套的自适应广告格式,但国内百度站长平台中推荐还是电脑版、手机版两种分开的方式
前段时间准备把百度广告管家的代码改为百度联盟的代码,顺便还想再比较一下百度、Google广告的一些数据,现在对Drupal模板、PHP程序比较熟悉了,所以采取在模板中嵌入PHP程序来随机出现Google/百度相关代码就很容易实现。
<?php
$number_rand = rand(0,1);//0:google,1:baidu
if ($number_rand == 0) {
$ad1 = '<script async src="//pagead2.googlesyndication.com/pagea
以前使用的MySQL存储引擎考虑到用多块硬盘放置各个库以便分散负载都是固定为MyISAM,现在搬迁到阿里云RDS后,考虑到查询效率及空间大小也保持继续用MyISAM。不过今天同事发现一个销售数据的网站在购物车结算的时候报错:
PDOException: SQLSTATE[HY000]: General error: 1785 When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommit
Drupal网站的Views模块非常有用,我们一直用它来生成一些列表,包括node的列表、term的列表等。最近在搬迁一个系列网站到阿里云美国数据中心的服务器过程中,发现RDS的磁盘IOPS一直非常高影响了使用,经过仔细排查,发现造成堵塞的主要原因都是带sort的SQL语句使得不断生成大的临时文件,再把Devel打开,找到这句SQL所在的页面,从而发现是网站的node全列表views有问题,打开views编辑发现Sort一栏中有内容,而去掉Sort条件再报错、运行就发现极少出现原来的问题了。
查了一些资料,在运行带有sort的select语句是需要产生临时文件
《Google AdSense实战宝典》这本书2009年撰写,先是推出了MediaWiki版本的配套网站,到2010年出版后,又改版推出了Drupal版本的网站,不过随着Google退出中国大陆市场,AdWords的广告主投放减少,AdSense的热度也逐步下降,国内网站联盟广告渐渐被百度联盟占领,我那本书第二次印刷后,销量也定格在6000册没有再印或者再版。
配套网站本来想做出一些与书不一样的内容,例如推出了论坛、多语言AdSense关键词查询工具、热门高价关键词列表等,不过后来国内连google.com的二级域名都封锁掉了,查看AdSense后台都需要翻墙
以前Drupal 6的网站迁移到阿里云服务器后,我们使用的是PHP 5.4,出现了几个以前没有的报错,在网上查了一下,说是Drupal 6比较老了,只支持到PHP 5.2,用在5.3以后可能会出现各种问题。没有办法,这样情况只好先自己改一下代码,下面就把改过的记录下来:
报错信息:warning: Creating default object from empty value in .../modules/taxonomy/taxonomy.pages.inc on line 33. 解决办法:
两年前写过一篇博文《Drupal中对404错误进行判断、重定向》,当时是在一个系列网站中采用自定义模块,在Module文件中构建了一个404错误的页面,在页面中对错误进行判断并302重定向到合适的内部页面。在博文下方及留言中也写了使用.htaccess进行错误处理的办法和例子。
除了站内的这种报错、跳转以外,也有站间的报错需要处理,例如http://chahaoba.com/ 这个站的最新日志信息中类似 http://chahaoba.com/1330719 这样的报错很多,其实正确的网址应该是http://www.chahaoba.com/1330719 ,也不知道
前一段时间发现分省的邮政编码系列网站首页常常会出现一个Views做的Block为空白的情况,例如北京邮政编码首页的“北京地市区县邮编”这一个Block里面没有内容,这样情况以前偶尔比较罕见会发生,例如几个月偶尔见到一次,但最近却成了经常的事情,每次重新清理该网站缓存会恢复,但1、2天后又出问题。
我用阿里云的网站监控设置了对该站首页每隔5分钟读取一次,如果发现没有应该存在的内容就报警,连续几天夜间准点开始报警,先以为是cron运行的结果,但时间不对,后来发现是巡检程序读取head和content的时候偶尔会这样,但具体原因依然不清楚,还是清理缓存后恢复,不久又出错。😢
2002-2023 v11.7 a-j-e-0