新浪SAE版WordPress用的百度地圖插件

轉載自:http://wordpress.org.cn/thread-102604-1-2.html

WordPress是世界上最為流行的博客建站程序,以模板、插架數量眾多且功能完善而見長,在國內也不乏眾多的使用者。然而,作為新浪SAE建站平臺中為數不多的默認推薦應用,Wordpress卻因為平臺種種限制而導致大量原有插件資源需要移植才可以應用,而目前官方已完成移植的插件數量寥寥,這給SAE平臺上的使用者帶來了煩惱。本文以我個人的插件移植實戰為案例,分享經驗,拋磚引玉。

國內Wordpress愛好者應該大部分都聽說并使用過Baidu Sitemap Generator這款Sitemap插件(插件作者:柳城博客)。因為新浪SAE平臺不能設置目錄777權限的問題,導致該插件目前不能直接應用,和眾多SAE使用者一樣,我本人也一直希望官方能對此做一個移植,但很遺憾,至今只見到官方放出Google sitemap的移植版。插件久等不來的情況下,我個人做了一次移植嘗試,并取得了成功,在這里分享一下方法:

與傳統主機服務方式不同,新浪SAE不支持直接的目錄寫權限,而是通過分布式Storage存儲服務解決。也就是說,凡是會在主機目錄下生成文件的插件都不能直接應用在SAE平臺上。那么現有插件如何改造才能使用呢?為此我研究了一下官方發布的Google sitemap插件移植版,在插件源代碼文件sitemap-core.php中,我發現了解決此問題的關鍵部分。在sitemap-core.php源碼第1385行,GetXmlPath()函數中,我發現定義存儲路徑的代碼如下圖所示:

新浪SAE版Wordpress用的百度地圖插件

注意圖中標紅的部分,該段代碼提示我們,SAE平臺將應用具有寫入權限目錄的路徑定義為”saestor://wordpress/”,而未移植的插件中,關于路徑的獲取通常用的是調用GetHomePath()函數獲取,返回的結果則是網站域名的當前根目錄路徑,這個目錄在SAE環境下不可寫,所以造成插件報錯,這也就是問題的根源所在。

發現上面的官方處理方式后,我開始進行對應的Baidu Sitemap Generator 改造。

打開Baidu Sitemap Generator 的核心文件baidu_sitemap.php,找到負責xml地圖文件和sitemap.html靜態文件寫入的函數—build_baidu_sitemap(),手術在這里進行。在源碼第322行,我們看到如下圖所示代碼:

新浪SAE版Wordpress用的百度地圖插件

看到了吧,XML文件生成時的路徑參數果然是通過GetHomePath()這個函數獲取的,并且有一個if語句來判斷權限,這就是問題所在,我們把路徑的定義修改為Storage存儲路徑,并且把if條件判斷中關于$GetHomePath的條件去掉,結果如下圖:

新浪SAE版Wordpress用的百度地圖插件

這樣,我們對XML文件生成的修改就完畢了,下一步是修改負責靜態Html地圖生成的代碼,在源碼第363行,同理修改下圖紅框內代碼:

新浪SAE版Wordpress用的百度地圖插件

修改后如下圖(或者干脆把if判斷去掉,也可以:)):

新浪SAE版Wordpress用的百度地圖插件

另外,我們還需要修改源碼中的第358行$sitemap_url這個變量的值為靜態地圖文件的url地址,因為這個變量的值會輸出在生成的靜態地圖文件頂部導航里,不修改的話,該鏈接會跳轉到404頁面去,對搜索引擎不夠友好。

至此,我們對Baidu Sitemap Generator 的移植接近尾聲,修改后的代碼已經可以正確的在SAE平臺上執行了,你可以在SAE后臺的Storage 中看到生成的Sitmap文件,如下圖所示,文件路徑應該是http://xxxx-wordpress.stor.sinaapp.com/sitemap_baidu.xml 的形式(xxxx是你的應用名稱),靜態html文件的路徑也是如此,文件名為sitemap.html,趕緊把地圖文件地址加進你的footer模板里吧:)。

新浪SAE版Wordpress用的百度地圖插件

一點美中不足,插件后臺中關于XML文件狀態的信息,在成功生成文件后卻不能正確顯示,我想這還是和文件路徑判斷有關,但我在這一點上沒有深究,畢竟我需要的功能已經實現了。

最后,說一下我一點個人想法:云計算技術對行業未來的影響力是每一位站長都不容忽視的,新浪SAE平臺作為國內云計算領域的先行者,現階段應用確實還有諸多不便,但我相信會日臻完善。作為一名普通的Wordpress愛好者,筆者以此文作拋磚引玉,文中代碼修改能實現功能,但欠嚴謹,希望最終由插件原作者或新浪官方做一個更完善,更權威的移植版本

七支劍
笑話
2B

發表評論

您必須登錄才能發表評論!