美文网首页PHP开发PHP经验分享
使用PHP生成网站Sitemap,Laravel风格

使用PHP生成网站Sitemap,Laravel风格

作者: KunkkaWu | 来源:发表于2020-07-23 10:36 被阅读0次

    PHP生成网站Sitemap,包含默认、分类、文章、标签、profile等

    PHP.jpg
    <?php
    
    namespace App\Libs;
    
    use App\Services\ArticleService;
    use App\Services\CategoryService;
    use App\Services\TagService;
    use App\Services\UserService;
    
    class Sitemap {
    
        public static $url = 'http://blog.getcoder.cn';
        public static $defaultXml = [
            [
                'loc' => '/',
                'priority' => 1.00,
            ],
            [
                'loc' => '/hot',
                'priority' => 0.80,
            ],
            [
                'loc' => '/login',
                'priority' => 0.80,
            ],
        ];
    
        public static function createSitemap(){
            // 创建一个DOMDocument对象
            $dom = new \DOMDocument("1.0","utf-8");
            header("Content-Type: text/xml");
            // 创建根节点
            $root = $dom->createElement("urlset");
            $dom->appendChild($root);
            //生成默认的Url
            self::createUrl($root, $dom, self::$defaultXml);
    
            //生成分类
            $catList = CategoryService::getList();
            $catXml = [];
            if(!empty($catList)){
                foreach ($catList as $item){
                    $catXml[] = [
                        'loc' => '/category?id=' . $item->id,
                        'priority' => 0.64,
                        'lastmod' => $item->update_time
                    ];
                }
            }
            self::createUrl($root, $dom, $catXml);
    
            //生成文章
            $articleList = ArticleService::getList();
            $articleXml = [];
            if(!empty($articleList)){
                foreach ($articleList as $item){
                    $articleXml[] = [
                        'loc' => '/article?id=' . $item->id,
                        'priority' => 0.94,
                        'lastmod' => $item->update_time
                    ];
                }
            }
            self::createUrl($root, $dom, $articleXml);
    
            //生成Tag
            $tagList = TagService::getList();
            $tagXml = [];
            if(!empty($tagList)){
                foreach ($tagList as $item){
                    $tagXml[] = [
                        'loc' => '/tag?id=' . $item->id,
                        'priority' => 0.64,
                        'lastmod' => $item->create_time
                    ];
                }
            }
            self::createUrl($root, $dom, $tagXml);
    
            //生成用户主页
            $userList = UserService::getList();
            $userXml = [];
            if(!empty($userList)){
                foreach ($userList as $item){
                    $userXml[] = [
                        'loc' => '/profile?uid=' . $item->uid,
                        'priority' => 0.7,
                        'lastmod' => $item->create_time
                    ];
                }
            }
            self::createUrl($root, $dom, $userXml);
    
            //生成xml文件
            $dom->save(public_path() . "/sitemap.xml");exit;
        }
    
        public static function createUrl(&$root, &$dom, $data){
            $date = date('Y-m-d');
            foreach($data as $value){
                // 建立根下子节点track
                $track = $dom->createElement("url");
                $root->appendChild($track);
                // 建立track节点下元素
                $loc = $dom->createElement("loc");
                $priority = $dom->createElement("priority");
                $lastmod = $dom->createElement("lastmod");
                $changefreq = $dom->createElement("changefreq");
    
                $track->appendChild($loc);
                $track->appendChild($priority);
                $track->appendChild($lastmod);
                $track->appendChild($changefreq);
    
                // 赋值
                $locNode        = $dom->createTextNode(self::$url.$value['loc']);
                $date = empty($value['lastmod']) ? $date : date('Y-m-d',  strtotime($value['lastmod']));
                $lastmodNode    = $dom->createTextNode($date);
                $changefreqNode = $dom->createTextNode('daily');
                $priorityNode   = $dom->createTextNode($value['priority']);
                $loc->appendChild($locNode);
                $lastmod->appendChild($lastmodNode);
                $changefreq->appendChild($changefreqNode);
                $priority->appendChild($priorityNode);
            }
        }
    
    }
    
    

    相关文章

      网友评论

        本文标题:使用PHP生成网站Sitemap,Laravel风格

        本文链接:https://www.haomeiwen.com/subject/jfpclktx.html