为了被搜索引擎尽快的收录,很多网站都有站点地图功能,这边我们介绍下在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
即可查看到站点地图了