站点地图是提升应用程序SEO的最重要部分。在这里,我将尝试解释在Laravel应用中实现动态站点地图的最简单方法。
我们将使用一个非常的好用的composer包,Laravelium / Sitemap来实现动态站点地图。
我们要做的第一件事是我们需要使用composer
安装此软件包:
composer require laravelium/sitemap
接下来,运行发布配置文件的命令:
代码语言:javascript复制php artisan vendor:publish --provider="LaraveliumSitemapSitemapServiceProvider"
此命令将生成以下文件,我们可以根据需要进行编辑
代码语言:javascript复制[/config/sitemap.php]
[/resources/views/vendor/sitemap]
[/public/vendor/sitemap]
接下来,创建一个SitemapController
的控制器
php artisan make:controller SitemapController
假设现在我们要制作一个博客站点的地图。将以下的代码放入我们刚创建的SitemapController
控制器:
use AppBlog;
use IlluminateHttpRequest;
use IlluminateSupportFacadesApp;
class SitemapController extends Controller
{
public function sitemap () {
// 创建一个生成站点地图的对象
$sitemap_contents = App::make("sitemap");
// 设置缓存
$sitemap_contents->setCache('laravel.sitemap_contents', 3600);
// 从数据库获取全部的博客文章
$blogs = Blog::where('published',1)->orderBy('created_at', 'desc')->get();
// 添加全部博客文章到站点地图
foreach ($blogs as $blog)
{
$url = url('blog/'.$blog->id);
$sitemap_contents->add($url, $blog->updated_at,'1.0','daily');
}
// 渲染站点地图(options: 'xml' (default), 'html', 'txt', 'ror-rss', 'ror-rdf')
return $sitemap_contents->render('xml');
}
}
此功能会将所有已发布的博客放在站点地图中。我们在这里将该站点地图缓存了3600秒。
我们可以在代码中看到每个链接的属性:
- 优先级(priority):1.0
- 更新频率(padte frequency):daily
您可以禁用缓存,也可以根据需要更改属性。
下一步将是编写路由查看站点地图的路由。转到routes/web.php
并编写以下的代码:
// 站点地图
Route::get('sitemap', 'SitemapController@sitemap');
放我这个路由,我们将能看到我们站点的地图如下:
laravel网站地图
想要更改站点地图的外观,可以到一下路径文件中更改:
代码语言:javascript复制resources/views/vendor/sitemap
要将图片(或图片列表)添加到此站点地图的内容中,我们可以foreach
将上述代码中的功能更改为
// 把这一行添加到页面的顶部
use URL;
// 修改相应foreach代码
foreach ($blogs as $blog)
{
$url = url('blog/'.$blog->id);
$images = [['url' => URL::to('uploads/'.$blog->thumbnail), 'title' => $blog->title, 'caption' => str_limit($blog->body, $limit = 100, $end = '...')]];
$sitemap_contents->add($url, $blog->updated_at,'1.0','daily',$images);
}
这会将图像数组添加到此站点地图中的每个博客项目,要添加更多图片,您可以根据需要扩展该数组。
至此,我们就完成站点地图功能。