温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用laravel生成sitemap的方法

发布时间:2020-12-19 11:11:11 来源:亿速云 阅读:236 作者:小新 栏目:编程语言

小编给大家分享一下用laravel生成sitemap的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

用laravel换一个思路,生成.xml动态链接,而不是保存文件到目录

1.配置routes,生成xml访问链接

2.根据项目逻辑生成sitemap

上代码:

配置routes

    //sitemap     Route::get('/sitemap/m/{type}.xml', 'SitemapController@siteMap');

核心代码

<?php namespace App\Http\Controllers\M; use App\Http\Controllers\BaseController; use App\Model\Bbs\Article; use App\Model\Bbs\Ask; use App\Model\Bbs\Thread; use App\Model\Main\Video; use App\Model\Garage\SeriesInfoModel; //todo 补充其他模块 use Carbon\Carbon; use Illuminate\Support\Facades\Cache; class SitemapController extends BaseController {     //todo 写一个汇总文件     public function siteMap($type)     {         $cacheKey = "site-" . $type;         //2小时缓存 保证加载速度         if (Cache::has($cacheKey)) {             $siteMap = Cache::get($cacheKey);         } else {             $siteMap = $this->buildSiteMap($type);             Cache::add($cacheKey, $siteMap, 120);         }         return response($siteMap)             ->header('Content-type', 'text/xml');     }     /**      * Build the Site Map      */     protected function buildSiteMap($type)     {         $sitemapInfo = [];         switch ($type) {             case 'video':                 $sitemapInfo = $this->getVideoInfo();                 break;             case 'article':                 $sitemapInfo = $this->getArticleInfo();                 break;             case 'bbs':                 $sitemapInfo = $this->getBbsInfo();                 break;             case 'ask':                 $sitemapInfo = $this->getAskInfo();                 break;             case 'series':                 $sitemapInfo = $this->getSeriesInfo();//车型库                 break;         }         $lastmod = $sitemapInfo[0]['pub_time'];         $xml = [];         $xml[] = '<?xml version="1.0" encoding="UTF-8"?' . '>';         $xml[] = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">';         $xml[] = '  <url>';         $xml[] = "    <loc>https://m.xxx.com</loc>";         $xml[] = "    <lastmod>$lastmod</lastmod>";         $xml[] = '    <changefreq>daily</changefreq>';         $xml[] = '    <priority>0.8</priority>';         $xml[] = '  </url>';         foreach ($sitemapInfo as $sitemap) {             $xml[] = '  <url>';             $xml[] = "    <loc>{$sitemap['url']}</loc>";             $xml[] = "    <mobile:mobile type=\"mobile\"/>";             $xml[] = "    <lastmod>{$sitemap['pub_time']}</lastmod>";             $xml[] = "  </url>";         }         $xml[] = '</urlset>';         return join("\n", $xml);     }     /**      * Return all the posts as $url => $date      */     protected function getVideoInfo()     {         $videos = Video::where('pub_time', '<=', Carbon::now())             ->where('published', 2)             ->where('is_del', 0)             ->orderBy('id', 'desc')             ->pluck('pub_time', 'id')             ->all();         $res = $article = [];         foreach ($videos as $id => $pub_time) {             $article['id'] = $id;             $article['pub_time'] = substr($pub_time, 0, 10);             $article['url'] = "https://m.xxx.com/video_" . $id . ".html";             $res[] = $article;         }         return $res;     }     protected function getArticleInfo()     {         $articles = Article::where('pub_time', '<=', Carbon::now())             ->where('published', 2)             ->where('is_del', 0)             ->orderBy('id', 'desc')             ->pluck('pub_time', 'id')             ->take(5000)             ->all();         $res = $article = [];         foreach ($articles as $id => $pub_time) {             $article['id'] = $id;             $article['pub_time'] = substr($pub_time, 0, 10);             $article['url'] = "https://m.xxx.com/news/article_" . $id . ".html";             $res[] = $article;         }         return $res;     }     protected function getBbsInfo()     {         $articles = Thread::where('visible', 1)             ->where('is_del', 0)             ->orderBy('id', 'desc')             ->pluck('dateline', 'id')             ->take(10000)             ->all();         $res = $article = [];         foreach ($articles as $id => $pub_time) {             $article['id'] = $id;             $article['pub_time'] = substr($pub_time, 0, 10);             $article['url'] = "https://m.xxx.com/bbs/thread_" . $id . ".html";             $res[] = $article;         }         return $res;     }     protected function getAskInfo()     {         $articles = Ask::where('state', 1)             ->orderBy('id', 'desc')             ->pluck('dateline', 'id')             ->take(10000)             ->all();         $res = $article = [];         foreach ($articles as $id => $pub_time) {             $article['id'] = $id;             $article['pub_time'] = substr($pub_time, 0, 10);             $article['url'] = "https://m.xxx.com/ask_" . $id . ".html";             $res[] = $article;         }         return $res;     }     //车型库     protected function getSeriesInfo()     {         $articles = SeriesInfoModel::where('status', 1)             ->where('is_stop', 0)             ->pluck('name', 'id')             ->all();         $res = $article = [];         foreach ($articles as $id => $pub_time) {             $article['id'] = $id;             $article['pub_time'] = date('Y-m-d', time());             $article['url'] = "https://m.xxx.com/series/" . $id . "/details";             $res[] = $article;         }         return $res;     } }

看完了这篇文章,相信你对用laravel生成sitemap的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI