如何为LARAVEL生成站点地图

站点地图是提升应用程序SEO的最重要部分。在这里,我将尝试解释在Laravel应用中实现动态站点地图的最简单方法。

我们将使用一个非常的好用的composer包,Laravelium / Sitemap来实现动态站点地图。

我们要做的第一件事是我们需要使用composer安装此软件包:

代码语言:javascript
复制
composer require laravelium/sitemap

接下来,运行发布配置文件的命令:

代码语言:javascript
复制
php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"

此命令将生成以下文件,我们可以根据需要进行编辑

代码语言:javascript
复制
[/config/sitemap.php]
[/resources/views/vendor/sitemap]
[/public/vendor/sitemap]

接下来,创建一个SitemapController的控制器

代码语言:javascript
复制
php artisan make:controller SitemapController

假设现在我们要制作一个博客站点的地图。将以下的代码放入我们刚创建的SitemapController控制器:

代码语言:javascript
复制
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秒。

我们可以在代码中看到每个链接的属性:

  1. 优先级(priority):1.0
  2. 更新频率(padte frequency):daily

您可以禁用缓存,也可以根据需要更改属性。

下一步将是编写路由查看站点地图的路由。转到routes/web.php并编写以下的代码:

代码语言:javascript
复制
// 站点地图
Route::get('sitemap', 'SitemapController@sitemap');

放我这个路由,我们将能看到我们站点的地图如下:

laravel网站地图

想要更改站点地图的外观,可以到一下路径文件中更改:

代码语言:javascript
复制
resources/views/vendor/sitemap

要将图片(或图片列表)添加到此站点地图的内容中,我们可以foreach将上述代码中的功能更改为

代码语言:javascript
复制
// 把这一行添加到页面的顶部
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);
}

这会将图像数组添加到此站点地图中的每个博客项目,要添加更多图片,您可以根据需要扩展该数组。

至此,我们就完成站点地图功能。