为了被搜索引擎尽快的收录,很多网站都有站点地图功能,这边我们介绍下在Laravel开发的项目中站点地图的实现的一种方式。

首先,创建服务,在app/Services目录下,新建SiteMap.php文件

SiteMap.php代码如下:

<?php 
namespace App\Services;

use App\Article;
use Carbon\Carbon;

class SiteMap {

		public function getSiteMap()
		{
				$siteMap = $this->createSiteMap();
				return $siteMap;
		}

		protected function createSiteMap()
		{
				$articles = $this->getArticles();
				$lastmod = Carbon::now();
				$url = trim(url(),'/').'/';
				$xml = [];
				$xml[] = '<?xml version="1.0" encoding="utf-8"?'.'>';
				$xml[] = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
				$xml[] = ' <url>';
				$xml[] = '  <loc>'.$url.'</loc>';
				$xml[] = '  <lastmod>'.$lastmod.'</lastmod>';
				$xml[] = '  <changefreq>daily</changefreq>';
				$xml[] = '  <priority>0.8</priority>';
				$xml[] = ' </url>';

				foreach ($articles as $key => $val) {
						$xml[] = ' <url>';
						$xml[] = '  <loc>'.$url.'article/'.$val->id.'</loc>';
						$xml[] = '  <lastmod>'.$val->created_at.'</lastmod>';
						$xml[] = ' </url>';
				}

				$xml[] = '</urlset>';

				return join("\n",$xml);
		}

		protected function getArticles()
		{
				return Article::where('created_at','<=',Carbon::now())
						->where('is_show',1)
						->orderBy('created_at','desc')
						->get();
		}
}

添加访问路由,在app/Http/routes.php文件中添加

Route::get('sitemap.xml','IndexController@siteMap');

在控制器app/Http/Controllers/IndexController.php添加访问方法:

public function siteMap(SiteMap $siteMap)
{
  $map = $siteMap->getSiteMap();
  return response($map)->header('Content-type','text/xml');
}

访问http://www.domain.com/sitemap.xml即可查看到站点地图了