当前位置

Drupal网站多语言版的站点地图自动转换

James Qi 在 2013年8月15日 - 11:45 提交
内容摘要:多语言Drupal网站的站点地图有一个名为xmlsitemap_i18n (XML sitemap internationalization)的插件,安装后就可以用为网站添加、生成各种语言相应的xml......

  多语言Drupal网站的站点地图有一个名为xmlsitemap_i18n (XML sitemap internationalization)的插件,安装后就可以用为网站添加、生成各种语言相应的xmlsitemap,这个功能很强,特别是对于各种语言版本有不同的网址、不同的内容、不同的页面数量的复杂情况,都可以适用。

  但我们在实际使用中,因为网站的数据量大(页面数达到几十万甚至上百万)、语言多(50种语言)、子网站多(一个系列可能有几十甚至几百个子网站),生成站点地图需要很长时间,而我们网站的多语言没有页面数量不同的情况,每个页面的每种语言都有一一对应的页面,生成的站点地图其实只有网址中语言代码部分的不同。

  想到我曾经写过《Drupal网站手机版的站点地图Mobile XML Sitemap》,就是修改xmlsitemap.page.inc程序来实现自动变换出手机版站点地图的,今天就尝试也用类似办法自动变换生成多语言版本站点地图,经过调试可以成功,代码如下:

// Attempt to increase time to transfer file.
  drupal_set_time_limit(240);

  $scheme = variable_get('file_default_scheme', 'public');
  // Transfer file in 16 KB chunks to save memory usage.
  if ($scheme && file_stream_wrapper_valid_scheme($scheme) && $fd = fopen($uri, 'rb')) {
//删除内容的开始行
/*jamesqi 2013-8-15 去掉以前的部分,替换成后面的4个步骤
    while (!feof($fd)) {
      print fread($fd, 1024*16);
    }
    fclose($fd);
*/
//删除内容的结束行
//添加内容的开始行
//步骤1:读取到变量
$content="";
while (!feof($fd)) {
  $content.=fread($fd, 1024*16);
}
fclose($fd);

//步骤2:手机版变换
global $base_url;
if (substr($base_url,7,2)=='m.') {
  $source=substr($base_url,0,7).substr($base_url,9);
} elseif (substr($base_url,-2)=='/m') {
  $source=substr($base_url,0,-2);
} else {
  $source=$base_url;
}
if ($source!==$base_url) {
  $content=str_replace($source,$base_url,$content);
  $content=str_replace('<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">','<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0">',$content);
  $content=str_replace('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0">',$content);
  $content=str_replace('</url>','<mobile:mobile/></url>',$content);
}

//步骤3:多语言变换
global $language;
$langcode=$language->language;
if ($langcode!=='en') {
  $content=str_replace("$base_url","$base_url/$langcode",$content);
}

//步骤4:输出变量
print $content;
//添加内容的结束行
  }
  else {
    drupal_not_found();
  }
  drupal_exit();
}

  从结果看达到预期效果,sitemap的index页面和实际sitemap页面都转换成功,手机版的多语言sitemap也没有问题,提交到搜索引擎可以正常进行。

  对于大数据量网站来说,这个办法不仅节约了生成时间,也节约了大量磁盘空间。

  Google推荐的多语言网站sitemap是在同一个xmlsitemap文件中,请看:站点地图:rel="alternate" hreflang="x",这个办法可以标明多语言页面之间的关系,值得推荐,但考虑到这样每个页面需要添加50中语言,一个sitemap文件的尺寸可能扩大50倍,超过规定的10M,所以暂时没有实行,还是先用上面的办法来做50种变换。以后可以考虑在页面中添加rel="alternate" hreflang="x"来标明页面之间的关系。

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符