8 (8452) 32-00-84

Как сделать sitemap в Laravel

Заходим на https://github.com/RoumenDamianoff/laravel-sitemap

И следуем инструкции по установке.

В командной строке пишем:

composer require roumen/sitemap

Затем переходим app/config/app.php, находим строчки

Package Service Providers...

и регистрируем сервис-провайдер Laravel:

Roumen\Sitemap\SitemapServiceProvider::class,

Публикуем необходимые стили, представления и конфигурационные файлы. Набираем в командной строке:

php artisan vendor:publish --provider="Roumen\Sitemap\SitemapServiceProvider"

Данная команда скопирует файлы и директории по следующему пути.

Copied File [/vendor/roumen/sitemap/src/config/config.php] To [/config/sitemap.php]

Copied Directory [/vendor/roumen/sitemap/src/views] To [/resources/views/vendor/sitemap]

Copied Directory [/vendor/roumen/sitemap/src/public] To [/public/vendor/sitemap]

Composer не будет обновлять их после команды

composer update

Вам нужно будет сделать это вручную.

Как создать файл карты сайта?

Создаем Roure в файле routes/web.php:

Route::get('sitemap', 'SitemapController@index');

и контроллер через терминал:

php artisan make:controller SitemapController

И в нем следующий код:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
use Roumen\Sitemap;
 
use Illuminate\Support\Facades\DB;
 
use Illuminate\Support\Facades\App;
 
use Illuminate\Support\Facades\URL;
 
class SitemapController extends Controller
{
    public function index() {
 
        $sitemap = App::make("sitemap");
 
        $sitemap->add(URL::to('/'), '2016-11-18T12:30:00+02:00', '1.0', 'monthly');
 
        $sitemap->add(URL::to('glazing'), '2016-11-18T12:30:00+02:00', '0.5', 'yearly');
 
        $sitemap->add(URL::to('facing'), '2016-11-18T20:10:00+02:00', '0.5', 'yearly');
 
        $sitemap->add(URL::to('warming'), '2016-11-18T20:10:00+02:00', '0.5', 'yearly');
 
        $sitemap->add(URL::to('repairs'), '2016-11-18T12:30:00+02:00', '0.5', 'yearly');
 
        $sitemap->add(URL::to('price'), '2016-11-18T12:30:00+02:00', '0.5', 'yearly');
 
        $sitemap->add(URL::to('articles'), '2016-11-18T12:30:00+02:00', '0.5', 'weekly');
 
        $sitemap->add(URL::to('reviews'), '2016-11-18T12:30:00+02:00', '0.5', 'monthly');
 
        $sitemap->add(URL::to('contacts'), '2016-11-18T12:30:00+02:00', '0.5', 'yearly');
 
        $pages = DB::table('pages')->orderBy('created_at', 'desc')->get();
 
        foreach ($pages as $page)
        {
            $sitemap->add('http://sitename.ru/'.$page->category.'/'.$page->slug, $page->updated_at, '0.5', 'yearly');
        }
 
        $regions = DB::table('regions')->orderBy('created_at', 'desc')->get();
 
        foreach ($regions as $region)
        {
            $sitemap->add('http://sitename.ru/'.$region->slug, $region->updated_at, '0.5', 'yearly');
        }
 
        $articles = DB::table('articles')->orderBy('created_at', 'desc')->get();
 
        foreach ($articles as $article)
        {
            $sitemap->add('http://sitename.ru/articles/'.$article->slug, $article->updated_at, '0.5', 'yearly');
        }
 
        $sitemap->store('xml', 'sitemap');
    }
}

 После того как контроллер создан открываем

http://sitename.ru/sitemap

Теперь файл sitemap.xml доступен по адресу:

http://sitename.ru/sitemap.xml

Для обновления карты достаточно еще раз ввести команду в адресной строке браузера

http://sitename.ru/sitemap

Нестандартные случаи

Иногда бывает что категория статьи или страницы является необязательным параметром.

В таком случае применяем следующую конструкцию:

$pages = DB::table('pages')->orderBy('created_at', 'desc')->get();
 
        foreach ($pages as $page)
        {
            $slugger = !empty($page->category) ? $page->category.'/'.$page->slug : $page->slug;
            $sitemap->add('http://sitename.ru/'.$slugger, $page->updated_at, '0.5', 'yearly');
        }

Пользуйтесь!

Стили отображения можно настроить в файле /public/vendor/sitemap/styles/xml.xsl