isaacongoma/laravel-feed

生成RSS订阅

资助包维护!
spatie

3.1.3 2021-03-12 16:15 UTC

README

Latest Version on Packagist MIT Licensed GitHub Workflow Status Total Downloads

本包提供了一种简单的方式来生成RSS订阅。您几乎不需要编写任何代码。只需按照安装说明更新配置文件,然后您就可以开始了。

spatie是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述在这里

支持我们

我们在创建一流的开放源代码包上投入了大量的资源。您可以通过购买我们的付费产品之一来支持我们。

我们非常感激您从家乡寄给我们明信片,并说明您正在使用我们的哪些包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上

安装

您可以通过composer安装此包

composer require spatie/laravel-feed

使用feeds-宏注册将显示订阅的路线。

// In routes/web.php
Route::feeds();

您可以将字符串作为宏的第一个参数传递。该字符串将用作您订阅的URL前缀。

接下来,您必须发布配置文件

php artisan vendor:publish --provider="Spatie\Feed\FeedServiceProvider" --tag="config"

下面是这个样子

return [
    'feeds' => [
        'main' => [
            /*
             * Here you can specify which class and method will return
             * the items that should appear in the feed. For example:
             * 'App\Model@getAllFeedItems'
             *
             * You can also pass an argument to that method:
             * ['App\Model@getAllFeedItems', 'argument']
             */
            'items' => '',

            /*
             * The feed will be available on this url.
             */
            'url' => '',

            'title' => 'My feed',
            'description' => 'The description of the feed.',
            'language' => 'en-US',

            /*
             * The view that will render the feed.
             */
            'view' => 'feed::feed',
        ],
    ],
];

可选地,您可以发布视图文件

php artisan vendor:publish --provider="Spatie\Feed\FeedServiceProvider" --tag="views"

用法

假设您有一个名为NewsItem的模型,其中包含您想要在订阅中显示的记录。

首先,您必须在模型上实现Feedable接口。Feedable期望一个方法:toFeedItem,它应返回一个FeedItem实例。

// app/NewsItem.php

use Illuminate\Database\Eloquent\Model;
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;

class NewsItem extends Model implements Feedable
{
    public function toFeedItem(): FeedItem
    {
        return FeedItem::create()
            ->id($this->id)
            ->title($this->title)
            ->summary($this->summary)
            ->updated($this->updated_at)
            ->link($this->link)
            ->author($this->author);
    }
}

如果您愿意,返回一个包含必要键的关联数组也可以。

// app/NewsItem.php

use Illuminate\Database\Eloquent\Model;
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;

class NewsItem extends Model implements Feedable
{
    public function toFeedItem(): FeedItem
    {
        return FeedItem::create([
            'id' => $this->id,
            'title' => $this->title,
            'summary' => $this->summary,
            'updated' => $this->updated_at,
            'link' => $this->link,
            'author' => $this->author,
        ]);
    }
}

接下来,您必须创建一个方法,该方法将返回必须在订阅中显示的所有项目。您可以为该方法命名任何您喜欢的名称,并且您可以执行任何查询。

// app/NewsItem.php

public static function getFeedItems()
{
   return NewsItem::all();
}

最后,您必须在配置文件中放置您类的名称以及您想要渲染订阅的URL

// config/feed.php

return [

    'feeds' => [
        'news' => [
            /*
             * Here you can specify which class and method will return
             * the items that should appear in the feed. For example:
             * '\App\Model@getAllFeedItems'
             */
            'items' => 'App\NewsItem@getFeedItems',

            /*
             * The feed will be available on this url.
             */
            'url' => '/feed',

            'title' => 'All newsitems on mysite.com',

            /*
             * Custom view for the items.
             *
             * Defaults to feed::feed if not present.
             */
            'view' => 'feed::feed',
        ],
    ],

];

items键必须指向返回以下之一的方法

  • 一个包含Feedable的数组或集合
  • 一个包含FeedItem的数组或集合
  • 包含订阅项值的数组或集合的数组

自定义您的订阅视图

该包提供开箱即用的feed::feed视图,用于显示订阅的详细信息。

但是,您可以通过在订阅配置中提供view键来使用每个订阅的定制视图。

在下面的示例中,我们使用之前的News订阅,并使用定制的feeds.news视图(位于resources/views/feeds/news.blade.php

// config/feed.php

return [

    'feeds' => [
        'news' => [
            'items' => 'App\NewsItem@getFeedItems',

            'url' => '/feed',

            'title' => 'All newsitems on mysite.com',

            /*
             * Custom view for the items.
             *
             * Defaults to feed::feed if not present.
             */
            'view' => 'feeds.news',
        ],
    ],

];

自动生成订阅链接

为了发现订阅,订阅阅读器正在寻找HTML文档的头部部分中的一个看起来像这样的标签

<link rel="alternate" type="application/atom+xml" title="News" href="/feed">

您可以通过部分视图将其添加到您的<head>中。

 @include('feed::links')

更新日志

请参阅变更日志获取更多关于最近更改的信息。

测试

composer test

贡献

请参阅贡献指南获取详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。