站点地图是提升应用程序SEO的最重要部分。在这里,我将尝试解释在Laravel应用中实现动态站点地图的最简单方法。
我们将使用一个非常的好用的composer包,Laravelium / Sitemap来实现动态站点地图。
我们要做的第一件事是我们需要使用composer
安装此软件包:
composer require laravelium/sitemap
接下来,运行发布配置文件的命令:
php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"
此命令将生成以下文件,我们可以根据需要进行编辑
[/config/sitemap.php]
[/resources/views/vendor/sitemap]
[/public/vendor/sitemap]
接下来,创建一个SitemapController
的控制器
php artisan make:controller SitemapController
假设现在我们要制作一个博客站点的地图。将以下的代码放入我们刚创建的SitemapController
控制器:
use App\Blog; use Illuminate\Http\Request; use Illuminate\Support\Facades\App;
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网站地图
想要更改站点地图的外观,可以到一下路径文件中更改:
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);
}
这会将图像数组添加到此站点地图中的每个博客项目,要添加更多图片,您可以根据需要扩展该数组。
至此,我们就完成站点地图功能。