下面是一个简单的PHP类示例,用于生成网站地图(sitemap)。这个类假设你已经有了获取网站所有页面URL的逻辑,并且这里只关注如何构建sitemap的XML结构。
<?php
class SitemapGenerator {
private $urls = [];
/**
* 构造函数,可以传入一个URL数组
*
* @param array $urls 网站的URL列表
*/
public function __construct(array $urls = []) {
$this->urls = $urls;
}
/**
* 添加单个URL到网站地图
*
* @param string $url 页面的URL
* @param string $lastmod 最后修改时间,格式为 YYYY-MM-DD
* @param float $changefreq 更新频率 (always, hourly, daily, weekly, monthly, yearly, never)
* @param float $priority 页面优先级 (0.0 到 1.0)
*/
public function addUrl($url, $lastmod = '', $changefreq = 'monthly', $priority = 0.5) {
$this->urls[] = [
'loc' => $url,
'lastmod' => $lastmod,
'changefreq' => $changefreq,
'priority' => $priority
];
}
/**
* 生成并返回网站地图的XML字符串
*
* @return string 网站地图的XML内容
*/
public function generate(): string {
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
foreach ($this->urls as $url) {
$urlElement = $xml->addChild('url');
$urlElement->addChild('loc', htmlspecialchars($url['loc']));
if (!empty($url['lastmod'])) {
$urlElement->addChild('lastmod', $url['lastmod']);
}
$urlElement->addChild('changefreq', $url['changefreq']);
$urlElement->addChild('priority', $url['priority']);
}
return $xml->asXML();
}
}
// 使用示例
$sitemap = new SitemapGenerator();
$sitemap->addUrl('https://example.com/', '2024-09-10', 'daily', 1.0);
$sitemap->addUrl('https://example.com/about', '2024-08-01', 'monthly', 0.8);
echo $sitemap->generate();
这段代码定义了一个`SitemapGenerator`类,它允许你添加URL到网站地图中,并可以指定每个URL的最后修改时间、更新频率和优先级。最后,你可以通过调用`generate`方法来生成并返回网站地图的XML字符串。
请注意,为了简化示例,这里没有包含从数据库或文件系统检索URL的逻辑,这需要根据你的应用需求来实现。此外,实际部署时,你可能还需要处理大型网站地图的分割问题(即创建多个sitemap文件,每个文件包含不超过50,000个URL,并在根sitemap文件中引用它们)。