Этот пакет предоставляет простой способ создания канала для вашего приложения Laravel. Поддерживаемые форматы: RSS, Atom и JSON. С вашей стороны практически не требуется кодирования. Просто следуйте инструкциям по установке, обновите файл конфигурации, и все готово.
Spatie — агентство веб-дизайна, базирующееся в Антверпене, Бельгия. На нашем сайте вы найдете обзор всех наших проектов с открытым исходным кодом.
Мы вкладываем много ресурсов в создание лучших в своем классе пакетов с открытым исходным кодом. Вы можете поддержать нас, купив один из наших платных продуктов.
Мы очень признательны вам за отправку нам открытки из вашего родного города с указанием того, какой из наших пакетов вы используете. Наш адрес вы найдете на странице контактов. Все полученные открытки мы публикуем на нашей виртуальной стене открыток.
Вы можете установить пакет через композитор:
composer require spatie/laravel-feed
Зарегистрируйте маршруты, на которых будут отображаться каналы, с помощью макроса feeds
.
// In routes/web.php
Route:: feeds ();
При желании вы можете передать строку в качестве первого аргумента макроса. Эта строка будет использоваться в качестве префикса URL-адреса для всех настроенных каналов.
Далее необходимо опубликовать файл конфигурации:
php artisan feed:install
Вот как это выглядит:
return [
' feeds ' => [
' main ' => [
/*
* Here you can specify which class and method will return
* the items that should appear in the feed. For example:
* [AppModel::class, 'getAllFeedItems']
*
* You can also pass an argument to that method. Note that their key must be the name of the parameter: *
* [AppModel::class, 'getAllFeedItems', 'parameterName' => 'argument']
*/
' items ' => '' ,
/*
* The feed will be available on this url.
*/
' url ' => '' ,
' title ' => ' My feed ' ,
' description ' => ' The description of the feed. ' ,
' language ' => ' en-US ' ,
/*
* The image to display for the feed. For Atom feeds, this is displayed as
* a banner/logo; for RSS and JSON feeds, it's displayed as an icon.
* An empty value omits the image attribute from the feed.
*/
' image ' => '' ,
/*
* The format of the feed. Acceptable values are 'rss', 'atom', or 'json'.
*/
' format ' => ' atom ' ,
/*
* The view that will render the feed.
*/
' view ' => ' feed::atom ' ,
/*
* The mime type to be used in the <link> tag. Set to an empty string to automatically
* determine the correct value.
*/
' type ' => '' ,
/*
* The content type for the feed response. Set to an empty string to automatically
* determine the correct value.
*/
' contentType ' => '' ,
],
],
];
При желании вы можете опубликовать файлы просмотра:
php artisan vendor:publish --provider= " SpatieFeedFeedServiceProvider " --tag= " feed-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 )
-> authorName ( $ this -> author )
-> authorEmail ( $ this -> authorEmail );
}
}
Если хотите, возврат ассоциативного массива с необходимыми ключами тоже поможет.
// 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 ,
' authorName ' => $ this -> authorName ,
]);
}
}
Далее вам нужно будет создать метод, который будет возвращать все элементы, которые должны отображаться в ленте. Вы можете назвать этот метод как угодно и выполнить любой запрос.
// 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:
* 'AppModel@getAllFeedItems'
* or
* ['AppModel', 'getAllFeedItems']
*
* You can also pass an argument to that method. Note that their key must be the name of the parameter: *
* ['AppModel@getAllFeedItems', 'parameterName' => 'argument']
* or
* ['AppModel', 'getAllFeedItems', 'parameterName' => 'argument']
*/
' items ' => ' AppNewsItem@getFeedItems ' ,
/*
* The feed will be available on this url.
*/
' url ' => ' /feed ' ,
' title ' => ' All newsitems on mysite.com ' ,
/*
* The format of the feed. Acceptable values are 'rss', 'atom', or 'json'.
*/
' format ' => ' atom ' ,
/*
* Custom view for the items.
*
* Defaults to feed::feed if not present.
*/
' view ' => ' feed::feed ' ,
],
],
];
Ключ items
должен указывать на метод, который возвращает одно из следующих значений:
Feedable
sFeedItem
s Этот пакет сразу же предоставляет представление feed::feed
, в котором отображаются сведения о ваших каналах.
Однако вы можете использовать собственное представление для каждого канала, указав ключ view
внутри конфигурации вашего канала.
В следующем примере мы используем предыдущий канал News
с настраиваемым представлением feeds.news
(расположенным в resources/views/feeds/news.blade.php
):
// config/feed.php
return [
' feeds ' => [
' news ' => [
' items ' => [ ' AppNewsItem ' , ' getFeedItems ' ],
' url ' => ' /feed ' ,
' title ' => ' All newsitems on mysite.com ' ,
/*
* The format of the feed. Acceptable values are 'rss', 'atom', or 'json'.
*/
' format ' => ' atom ' ,
/*
* 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 ' )
В качестве альтернативы вы можете использовать этот компонент лезвия:
< x-feed-links />
composer test
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Пожалуйста, ознакомьтесь с нашей политикой безопасности, чтобы узнать, как сообщать об уязвимостях безопасности.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.