在刚刚写的一篇博文《为网站添加图片网站地图》中我提到有三种办法来实现:
- 专门写的php程序,与.htaccess的rewrite配合重写网址(详见《Drupal网站Views生成页面的XML网站地图构建》)
- 用module文件中的menu路径来生成(现在写的这篇博客文章来介绍)
- 用views中的xml views来生成(这个办法我也再专门写一篇博客文章来介绍)
其实用module文件中menu路径来生成网址是Drupal的标准做法,我们用这种做法生成过普通html页面以及png图片页面,最近还用这个办法生成过svg图片文件,只要在调用的函数中使用header控制生成页面的格式就可以。
下面是module文件中生成image-sitemap.xml的例子:
/**
* menu定义
* 并不是网页中的菜单定义,而是路由定义、路径定义,在module中定义新的页面时使用
*/
function emoji_menu() {
$items = array();
...
//image sitemap
$items['image-sitemap.xml'] = array (
'title' => 'Image Sitemap',
'page callback' => 'image_sitemap_xml',
'access callback' => 'user_access',
'access arguments' => array('access content'),
);
...
}
/**
* 函数:图片站点地图
* @param: 无
* @return: 图片站点地图xml代码
*/
function image_sitemap_xml() {
global $language;
$language_code = $language->language;
$server_name = $_SERVER['SERVER_NAME'];
$start = '<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://'.$server_name.'/xml-image-sitemap.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
';
$end = '</urlset>';
$output = $start;
$emoji_array = array(元素略...);
foreach ($emoji_array as $key => $emoji) {
$emoji_url = urlencode($emoji);
$short_name = ...;
$code_point = ...;
$output .= "<url>\n";
$output .= " <loc>https://www.emojiall.com/$language_code/emoji/$emoji_url</loc>\n";
//社交媒体分享图片
$output .= " <image:image>\n";
$output .= " <image:loc>https://www.emojiall.com/social-media-share/$emoji_url.png</image:loc>\n";
$output .= " <image:title>$emoji - emojiall.com</image:title>\n";
$output .= " <image:caption>$short_name</image:caption>\n";
$output .= " </image:image>\n";
//头部svg图片
$output .= " <image:image>\n";
$output .= " <image:loc>https://www.emojiall.com/en/header-svg/$emoji_url.svg</image:loc>\n";
$output .= " <image:title>$emoji $short_name SVG - emojiall.com</image:title>\n";
$output .= " <image:caption>$short_name $code_point</image:caption>\n";
$output .= " </image:image>\n";
$output .= "</url>\n";
}
$output .= $end;
header("Content-type: application/xml");
print $output;
return NULL;
}
上面的代码中略去了少量具体值,不影响实质。
这样就在一个Drupal 7网站中生成了一个可以访问的图片网站地图。
评论1
感谢博主分享
感谢博主分享