php网站地图生成类示例


下面是一个简单的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文件中引用它们)。