J'ai déjà écrit un plan de site en utilisant les frameworks yaf et yii : l'idée est de générer des fichiers .xml en fonction des exigences et de les enregistrer dans le répertoire spécifié par le projet.
Utilisez Laravel pour changer d'idée et générer un lien dynamique .xml au lieu d'enregistrer le fichier dans le répertoire
Configurer les itinéraires et générer un lien d'accès XML
2. Générer un plan du site selon la logique du projet
Code :
Configurer les itinéraires
//sitemap Route::get('/sitemap/m/{type}.xml', 'SitemapController@siteMap');
Code principal
<?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; } }
Pour des articles plus techniques liés au framework laravel, veuillez visiter la colonne tutoriel laravel !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!