fullstackru
@fullstackru

Как сгенерировать RSS-ленту для Laravel?

Ребят, как сгенерировать RSS-ленту для Laravel без каких-либо дополнительных пакетов? Я попытался, но у меня почему-то XML-теги выполнились на клиенте.
  • Вопрос задан
  • 870 просмотров
Решения вопроса 1
fullstackru
@fullstackru Автор вопроса
Я нашел решение для sitemap, по такому же принципу была исправлена ошибка для RSS-ленты. {{ Request::header('Content-Type : text/xml') }} - устанавливает нужный тип содержимого.

Было:

<?php
header("Content-Type: text/xml;charset=iso-8859-1"); // Здесь была ошибка
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    @foreach ($posts as $post)
        <url>
            <loc>{{ url($post->slug) }}</loc>
            <lastmod>{{ $post->updated_at->tz('GMT')->toAtomString() }}</lastmod>
            <changefreq>monthly</changefreq>
            <priority>1</priority>
        </url>
    @endforeach
</urlset>


Исправил:

{{ Request::header('Content-Type : text/xml') }}
<?php echo '<?xml version="1.0" encoding="UTF-8"?>';?>
 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    @foreach ($posts as $post)
        <url>
            <loc>{{ url($post->slug) }}</loc>
            <lastmod>{{ $post->updated_at->tz('GMT')->toAtomString() }}</lastmod>
            <changefreq>monthly</changefreq>
            <priority>1</priority>
        </url>
    @endforeach
</urlset>


Также, если вы хотите использовать поддержку PHP внутри XML-файлов - можно добавить следующую строчку в файл .htaccess:

AddType application/x-httpd-php .php .xml
php_flag short_open_tag off


Еще можно указать тип в самом контроллере:

public function index()
    {
      $articles = Article::all()->first();
      $categories = Category::all()->first();
      $questions = Question::all()->first();
      $tags = Tag::all()->first();

      return response()->view('sitemap.index', [
          'articles' => $articles,
          'categories' => $categories,
          'questions' => $questions,
          'tags' => $tags,
      ])->header('Content-Type', 'text/xml');
    }


Но я сделал немного попроще:

public function sitemap() {
	$articles = DB::table('articles')->orderBy('id', 'desc');

	return response()->view('sitemap', [
		'articles' => $articles,
	])->header('Content-Type', 'text/xml');
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы