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

Souleigh ✨
• 阅读 1658

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

<?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);
        }
    }

} 
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这