Este paquete proporciona una manera fácil de generar un feed para su aplicación Laravel. Los formatos admitidos son RSS, Atom y JSON. Casi no se requiere codificación de su parte. Simplemente siga las instrucciones de instalación, actualice su archivo de configuración y estará listo.
Spatie es una agencia de diseño web con sede en Amberes, Bélgica. Encontrará una descripción general de todos nuestros proyectos de código abierto en nuestro sitio web.
Invertimos muchos recursos en la creación de los mejores paquetes de código abierto. Puedes apoyarnos comprando uno de nuestros productos pagos.
Apreciamos mucho que nos envíe una postal desde su ciudad natal, mencionando cuál de nuestros paquetes está utilizando. Encontrarás nuestra dirección en nuestra página de contacto. Publicamos todas las postales recibidas en nuestro muro virtual de postales.
Puede instalar el paquete a través del compositor:
composer require spatie/laravel-feed
Registre las rutas en las que se mostrarán los feeds utilizando la macro feeds
.
// In routes/web.php
Route:: feeds ();
Opcionalmente, puede pasar una cadena como primer argumento de la macro. La cadena se utilizará como prefijo de URL para todos los feeds configurados.
A continuación, debes publicar el archivo de configuración:
php artisan feed:install
Así es como se ve:
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 ' => '' ,
],
],
];
Opcionalmente puede publicar los archivos de visualización:
php artisan vendor:publish --provider= " SpatieFeedFeedServiceProvider " --tag= " feed-views "
Imagine que tiene un modelo llamado NewsItem
que contiene registros que desea que se muestren en el feed.
Primero debes implementar la interfaz Feedable
en ese modelo. Feedable
espera un método: toFeedItem
, que debería devolver una instancia 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 );
}
}
Si lo prefiere, devolver una matriz asociativa con las claves necesarias también será suficiente.
// 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 ,
]);
}
}
A continuación, deberá crear un método que devolverá todos los elementos que deben mostrarse en el feed. Puede nombrar ese método como desee y puede realizar cualquier consulta que desee.
// app/NewsItem.php
public static function getFeedItems ()
{
return NewsItem:: all ();
}
Finalmente, debes poner el nombre de tu clase y la URL donde quieres que se muestre el feed en el archivo de configuración:
// 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 ' ,
],
],
];
La clave items
debe apuntar a un método que devuelva uno de los siguientes:
Feedable
sFeedItem
s Este paquete proporciona, lista para usar, la vista feed::feed
que muestra los detalles de sus feeds.
Sin embargo, puede utilizar una vista personalizada por feed proporcionando una clave view
dentro de la configuración de su feed.
En el siguiente ejemplo, utilizamos la fuente News
anterior con una vista personalizada feeds.news
(ubicada en 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 ' ,
],
],
];
Para descubrir un feed, los lectores del feed buscan una etiqueta en la sección principal de sus documentos html que se vea así:
< link rel =" alternate " type =" application/atom+xml " title =" News " href =" /feed " >
Puedes agregar esto a tu <head>
a través de una vista parcial.
@ include ( ' feed::links ' )
Como alternativa puedes utilizar este componente de cuchilla:
< x-feed-links />
composer test
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte CONTRIBUCIÓN para obtener más detalles.
Revise nuestra política de seguridad sobre cómo informar vulnerabilidades de seguridad.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.