前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何为LARAVEL生成站点地图

如何为LARAVEL生成站点地图

作者头像
Lemon黄
发布2020-04-01 16:50:47
1.4K0
发布2020-04-01 16:50:47
举报
文章被收录于专栏:Lemon黄

站点地图是提升应用程序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);
}

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档