本人從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