如何为LARAVEL生成站点地图

2020-04-01 16:50:47 浏览数 (1)

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

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

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

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

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

代码语言:javascript复制
php artisan vendor:publish --provider="LaraveliumSitemapSitemapServiceProvider"

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

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

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

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

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

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

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

  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);
}

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

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

0 人点赞