From e4eab97a8f1d1483d3ecc00e6a1a2fbe04e229c9 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Wed, 15 Feb 2023 21:19:13 +0100 Subject: [PATCH] rss feed added --- app/Models/LibraryItem.php | 3 +- config/feed.php | 4 +- resources/views/vendor/feed/atom.blade.php | 48 +++++++++++++++++++++ resources/views/vendor/feed/json.blade.php | 46 ++++++++++++++++++++ resources/views/vendor/feed/links.blade.php | 3 ++ resources/views/vendor/feed/rss.blade.php | 39 +++++++++++++++++ 6 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 resources/views/vendor/feed/atom.blade.php create mode 100644 resources/views/vendor/feed/json.blade.php create mode 100644 resources/views/vendor/feed/links.blade.php create mode 100644 resources/views/vendor/feed/rss.blade.php diff --git a/app/Models/LibraryItem.php b/app/Models/LibraryItem.php index 2c6d3af9..3d9735ee 100644 --- a/app/Models/LibraryItem.php +++ b/app/Models/LibraryItem.php @@ -54,6 +54,7 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable ]) ->where('news', true) ->where('approved', true) + ->orderByDesc('created_at') ->get(); } @@ -148,7 +149,7 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable public function toFeedItem(): FeedItem { return FeedItem::create() - ->id('news/'. $this->slug) + ->id('news/'.$this->slug) ->title($this->name) ->enclosure($this->getFirstMediaUrl('main')) ->enclosureLength($this->getFirstMedia('main')->size) diff --git a/config/feed.php b/config/feed.php index 9dda878b..79848986 100644 --- a/config/feed.php +++ b/config/feed.php @@ -32,12 +32,12 @@ return [ /* * The format of the feed. Acceptable values are 'rss', 'atom', or 'json'. */ - 'format' => 'atom', + 'format' => 'rss', /* * The view that will render the feed. */ - 'view' => 'feed::atom', + 'view' => 'feed::rss', /* * The mime type to be used in the tag. Set to an empty string to automatically diff --git a/resources/views/vendor/feed/atom.blade.php b/resources/views/vendor/feed/atom.blade.php new file mode 100644 index 00000000..a9be43f3 --- /dev/null +++ b/resources/views/vendor/feed/atom.blade.php @@ -0,0 +1,48 @@ +` won't get parsed as short tags */ + ''.PHP_EOL +?> + + @foreach($meta as $key => $metaItem) + @if($key === 'link') + <{{ $key }} href="{{ url($metaItem) }}" rel="self"> + @elseif($key === 'title') + <{{ $key }}>{!! \Spatie\Feed\Helpers\Cdata::out($metaItem) !!} + @elseif($key === 'description') + {{ $metaItem }} + @elseif($key === 'language') + @elseif($key === 'image') +@if(!empty($metaItem)) + {!! $metaItem !!} +@else + +@endif + @else + <{{ $key }}>{{ $metaItem }} + @endif + @endforeach + @foreach($items as $item) + + {!! \Spatie\Feed\Helpers\Cdata::out($item->title) !!} + + {{ url($item->id) }} + + {!! \Spatie\Feed\Helpers\Cdata::out($item->authorName) !!} +@if(!empty($item->authorEmail)) + {!! \Spatie\Feed\Helpers\Cdata::out($item->authorEmail) !!} + +@endif + + + {!! \Spatie\Feed\Helpers\Cdata::out($item->summary) !!} + + @if($item->__isset('enclosure')) + + @endif + @foreach($item->category as $category) + + @endforeach + {{ $item->timestamp() }} + + @endforeach + diff --git a/resources/views/vendor/feed/json.blade.php b/resources/views/vendor/feed/json.blade.php new file mode 100644 index 00000000..32f60556 --- /dev/null +++ b/resources/views/vendor/feed/json.blade.php @@ -0,0 +1,46 @@ +{ + "version": "https://jsonfeed.org/version/1.1", + "title": "{{ $meta['title'] }}", +@if(!empty($meta['description'])) + "description": "{{ $meta['description'] }}", +@endif + "home_page_url": "{{ config('app.url') }}", + "feed_url": "{{ url($meta['link']) }}", + "language": "{{ $meta['language'] }}", +@if(!empty($meta['image'])) + "icon": "{{ $meta['image'] }}", +@endif + "authors": [@foreach($items->unique('authorName') as $item){ + "name": "{{ $item->authorName }}" + }@if(! $loop->last),@endif +@endforeach + + ], + "items": [@foreach($items as $item){ + "id": "{{ url($item->id) }}", + "title": {!! json_encode($item->title) !!}, + "url": "{{ url($item->link) }}", + "content_html": {!! json_encode($item->summary) !!}, + "summary": {!! json_encode($item->summary) !!}, + "date_published": "{{ $item->timestamp() }}", + "date_modified": "{{ $item->timestamp() }}", + "authors": [{ "name": {!! json_encode($item->authorName) !!} }], +@if($item->__isset('image')) + "image": "{{ url($item->image) }}", +@endif +@if($item->__isset('enclosure')) + "attachments": [ + { + "url": "{{ url($item->enclosure) }}", + "mime_type": "{{ $item->enclosureType }}", + "size_in_bytes": {{ $item->enclosureLength }} + } + ], +@endif + "tags": [ {!! implode(',', array_map(fn($c) => '"'.$c.'"', $item->category)) !!} ] + }@if(! $loop->last), +@endif + @endforeach + + ] +} diff --git a/resources/views/vendor/feed/links.blade.php b/resources/views/vendor/feed/links.blade.php new file mode 100644 index 00000000..d99a654b --- /dev/null +++ b/resources/views/vendor/feed/links.blade.php @@ -0,0 +1,3 @@ +@foreach($feeds as $name => $feed) + +@endforeach diff --git a/resources/views/vendor/feed/rss.blade.php b/resources/views/vendor/feed/rss.blade.php new file mode 100644 index 00000000..055e8b7f --- /dev/null +++ b/resources/views/vendor/feed/rss.blade.php @@ -0,0 +1,39 @@ +` won't get parsed as short tags */ +''.PHP_EOL +?> + + + + {!! \Spatie\Feed\Helpers\Cdata::out($meta['title'] ) !!} + {!! \Spatie\Feed\Helpers\Cdata::out(url($meta['link']) ) !!} + @if(!empty($meta['image'])) + + {{ $meta['image'] }} + {!! \Spatie\Feed\Helpers\Cdata::out($meta['title'] ) !!} + {!! \Spatie\Feed\Helpers\Cdata::out(url($meta['link']) ) !!} + + @endif + {!! \Spatie\Feed\Helpers\Cdata::out($meta['description'] ) !!} + {{ $meta['language'] }} + {{ $meta['updated'] }} + + @foreach($items as $item) + + {!! \Spatie\Feed\Helpers\Cdata::out($item->title) !!} + {{ url($item->link) }} + {!! \Spatie\Feed\Helpers\Cdata::out($item->summary) !!} + {!! \Spatie\Feed\Helpers\Cdata::out($item->authorName.(empty($item->authorEmail)?'':' <'.$item->authorEmail.'>')) !!} + {{ url($item->id) }} + {{ $item->timestamp() }} + @if($item->__isset('enclosure')) + + + @endif + @foreach($item->category as $category) + {{ $category }} + @endforeach + + @endforeach + +