美文网首页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风格

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

  • 网站地图生成

    网站地图生成是使用站长工具_sitemap网站地图免费生成工具完成的,站长工具_sitemap网站地图免费生成工具...

  • 网站地图(sitemap)在线生成

    网站地图在线生成其实也就是sitemap在线生成,在线生成网站地图(sitemap)的方式其实就两种: 一是、网站...

  • laravel 启动swoole

    使用laravel artisan 生成swoole 启动命令 php artisan make:command ...

  • 网站地图

    站长工具_sitemap网站地图免费生成工具(https://sitemap.webkk.net)提供便捷的在线工...

  • 2019-02-27

    1、Laravel使用php artisan key:generate 生成APP key2、常用的vagrant...

  • sitemap生成工具

    sitemap生成工具是一种制作网站地图的工具,sitemap生成工具分为客户端和在线两种类型。相比客户端,在线工...

  • 2020-09-29

    Laravel php artisan 自动生成Model+Migrate+Controller 命令大全 php...

  • NodeJs生成sitemap站点地图

    如果博客是使用Hexo管理的,sitemap可以使用插件来生成。但对于一个内容管理网站,后端可能是express、...

  • Laravel自定义command命令

    用过Laravel的都知道,Laravel通过php artisan make:controller可以生成控制器...

网友评论

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

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