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

Souleigh ✨ 等级 800 1 0
标签: sitemapPHP

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

} 
收藏
评论区

相关推荐

使用PHP生成网站Sitemap,Laravel风格
PHP生成网站Sitemap,包含默认、分类、文章、标签、profile等 <?php namespace AppLibs; use AppS
Go 语言基础入门教程 —— 函数篇:匿名函数和闭包
### 匿名函数 熟悉 Laravel 框架(一个 PHP Web 框架)的同学对匿名函数应该很熟悉,Laravel 框架中有着大量匿名函数的应用场景,比如路由定义、绑定实现到接口等: // 路由定义 再比如 Swoole 中通过回调函数处理网络事件实现异步事件驱动也是匿名函数的典型应用场景: //收到请求时触发 可以看到,匿名函数
Monolog 优化及打造 ELK 友好的日志格式
[Monolog](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2FSeldaek%2Fmonolog) 是目前最流行的php日志库,许多流行的php框架都用Monolog作为默认的日志库,例如symfony、laravel。 默认情况下,symfony、lara
Java生成sitemap网站地图
sitemap 是什么?对应没有接触过网站 SEO 的同学可能不知道,这里引用一下百度站长的一段解释。 > Sitemap(即站点地图)就是您网站上各网页的列表。创建并提交Sitemap有助于百度发现并了解您网站上的所有网页。您还可以使用Sitemap提供有关您网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供百度Spider参考 简单来
MySQL一次修改表字段故障修复演示
**导读** > 作者:夏厚道 > > 知数堂MySQL DBA班第10期学员 > > 微信号:xhd304,欢迎交流~ 一、问题背景 ====== 本公司开发使用的开发语言是PHP Laravel框架,通过 php artisan migrate 进行操作,导致数据库异常,随后再执行这个SQL语句一直报错,报错提示如下: ![](https:/
CODING DevOps 代码质量实战系列第二课,相约周三
随着 ToB(企业服务)的兴起和 ToC(消费互联网)产品进入成熟期,线上故障带来的损失越来越大,代码质量越来越重要,而「质量内建」正是 DevOps 核心理念之一。**《DevOps 代码质量实战(PHP 版)》**为 **CODING DevOps 代码质量实战系列**的第二课,同时也是本系列的 PHP 版,杨周老师将以 PHP Laravel 为例,为
Centos配置nginx+php
添加第三方源: yum install epel-release 安装nginx: yum install nginx 安装php: yum install php php-fpm php-mbstring php-mysql php-gd php-fastcgi php-cgi 安装redis: yum ins
Larave
作者 -- 本文由 张舫 童鞋投稿 > 同时也欢迎更多的小伙伴投稿 开发需求 ---- PHP >= 7.0.0OpenSSL PHP ExtensionPDO PHP ExtensionMbstring PHP ExtensionTokenizer PHP ExtensionXML PHP ExtensionApache/NginxMySQ
Laravel
​原文作者:[Taylor Otwell](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Ftaylorotwell) 网上偶得此书,是 Laravel 的作者写的。 Laravel 是近年来优秀的 PHP 框架,国内外都有很多支持者。该框架应用了大量 PHP5
Laravel 第三方登陆之 Socialite Providers
`Laravel` 框架在 `PHP` 以优雅著称,得到不少同行之人称赞;也招揽了,无数的第三方扩展包,扩展了框架的各个方面功能,本篇文章,采用 [Socialite Providers](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fsocialiteproviders.netlify.
Laravel、Yii、ThinkPHP性能测试
#主流PHP框架性能非权威测试 作为一个PHP开发者,而且是初创企业团队的技术开发者,选择开发框架是个很艰难的事情。 用`ThinkPHP`的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期代码解耦是个让人头疼的事情。不过很多第三方功能不需要自己写,众多大牛已经给铺好路了。 用`Laravel`的话,传说写起来很爽扩展性也够,但是学习成
Laravel使用redis保存SESSION
Laravel使用redis保存SESSION -------------------------- 首先确认服务器已经安装redis服务,php安装了redis扩展. 1.打开config/database.php。在redis配置项中增加session的连接 'session' => [ 'host'
Laravel的生命周期
Laravel的生命周期 ============ > 世间万物皆有生命周期,当我们使用任何工具时都需要理解它的工作原理,那么用起来就会得心应手,应用开发也是如此。理解了它的原理,那么使用起来就会游刃有余。 > 在了解 Laravel 的生命周期前,我们先回顾一下PHP 的生命周期。 PHP 的生命周期 --------- ### PHP 的运行模
Linux安装Composer
Composer是php的一个包管理器,使用Composer能极大的提高我们的代码效率。当我们需要使用优雅的laraverl框架时我们一定不能绕过Composer当然Composer不是只为laravel服务的,他是为整个php服务的。(Composer需要php5.3.2以上才能运行) 1. 下载Composer包 curl
SEO优化:Sitemap插件生成WordPress网站地图
![image](https://www.cztcms.cn/wp-content/uploads/2020/05/sitemapseo.png) ▣ 前言 ---- > 什么是sitemap网站地图?wordpress如何自动生成sitemap地图文件呢?     对于`网站建设`来说,`网站地图`是非常关键的,因为这对`搜索引擎收录`是很有利的。网