Baidu Sitemap Generator For SAE(KV版) :

*只是简单移植,在能用的情况下不保证没有其他不足的地方


什么是 Baidu Sitemap Generator ?

This pulgin generates a Baidu XML-Sitemap for WordPress Blog. | 生成百度 Sitemap XML、HTML 文件。就相当于网站被百度–全球最大的中文搜索引擎订阅,进而为您的网站带来潜在的流量。

为什么要移植这个插件?

众所周知,新浪云计算平台(SAE)是没有本地文件写入(777)权限的,这直接导致很多要动态生成文件的WP插件不能使用,只能通过移植来适应SAE的环境

如何解决777权限问题 ?

SAE不开放777权限除了保证安全性之外,还因为其特殊的服务器架构(分布式、云计算,哎,我也是一知半解的,反正就是不能写本地),但是官方提供了很多其他的替代、解决方案(Storage、Memcache)都能解决无法写本地的问题。

具体有怎么样的移植思路?

首先,我们可以看 wordpress for SAE 中已经移植过来的插件 Google sitemap ,在插件源代码文件sitemap-core.php GetXmlPath()函数中,我发现定义存储路径的代码如下图所示:

而且官方文档里面也有那么一句话,是值得我们注意的:

为最大程度降低应用移植的难度,SAE为Storage、Memcache提供了wrapper封装,分别对应”saestor://”和”saemc://”,对于大部分应用,只需要修改目录前缀即可完成代码迁移。

##

着手开始移植 Baidu Sitemap Generator

①首先,我们去Wordpress 那里去把官方插件给下载回来

下载地址:http://wordpress.org/extend/plugins/baidu-sitemap-generator/

②把静态文件生成的路径修改为KVDB存储路径

打开Baidu Sitemap Generator 的核心文件baidu_sitemap.php,找到负责xml地图文件和sitemap.html静态文件写入的函数—build_baidu_sitemap()

1、先修改生成xml地图文件那部分,未修改前代码如下

1
2
3
4
5
6
7
8
9
10
11
12
/** save XML file as sitemap_baidu.xml **/
$GetHomePath = GetHomePath();
$filename = $GetHomePath.'sitemap_baidu.xml';
if( IsFileWritable($GetHomePath) || IsFileWritable($filename) ){
file_put_contents("$filename","$baidu_xml");
@chmod($filename, 0777);
/** Messages **/
baidu_sitemap_topbarmessage(__('Congratulate, Build the XML file success','baidu_sitemap'));
}else{
/** Messages **/
baidu_sitemap_topbarmessage(__('Directory is not writable. please chmod your directory to 777.','baidu_sitemap'));
}

添加入KVDB存储路径,修改后的代码为(去掉if里面条件判断)

1
2
3
4
5
6
7
/** save XML file as sitemap_baidu.xml **/
$GetHomePath = GetHomePath();
$filename = "saekv://wordpress/sitemap_baidu.xml";
file_put_contents("$filename","$baidu_xml");
@chmod($filename, 0777);
/** Messages **/
baidu_sitemap_topbarmessage(__('Congratulate, Build the XML file success','baidu_sitemap'));

2、再修改生成HTML地图文件那部分,跟上面的大同小异,未修改前的代码

1
2
3
4
5
6
7
8
$GetHomePath = GetHomePath();
$filename_html = $GetHomePath.'sitemap.html';
if( IsFileWritable($GetHomePath) || IsFileWritable($filename_html) ){
file_put_contents("$filename_html","$html");
@chmod($filename_html, 0777);
/** Messages **/
/*baidu_sitemap_topbarmessage(__('Congratulate, Build the Html file success','baidu_sitemap'));*/
}

修改后的代码段

1
2
3
4
5
6
$GetHomePath = GetHomePath();
$filename_html = "saekv://wordpress/sitemap.html";
file_put_contents("$filename_html","$html");
@chmod($filename_html, 0777);
/** Messages **/
/*baidu_sitemap_topbarmessage(__('Congratulate, Build the Html file success','baidu_sitemap'));*/


后话:这样,自动生成的sitemap.html 和 sitemap.xml 在KVDB路径下面而非网站的根目录下面,有什么办法能把这2个静态文件“转移”到网站的根目录下面呢
请点击查看我的另一篇博文:

SAE平台中把KVDB里的sitemap文件 URL重写成域名根目录下的文件