Laravel 5: генерируем Sitemap.xml

test

Задача создавать Sitemap.xml по крону.

Как и говорит нам документация по Laravel 5. В нем уже есть готовый планировщик, достаточно добавить его один раз в крон, а все нужные задачи подключать уже в него. Создаем задачи для планировщика
#php artisan make:console XMLSitemap
Console command created successfully.
Новый файл будет создан по пути app/Console/Commands/XMLSitemap.php. Добавляем в него код нужный нам для генерации нашего sitemap:
< ? php namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Blog;
use Page;
use DateTime;

class XMLSitemap extends Command {

/**
* The console command name.
*
* @var string
*/
protected $name = 'xmlsitemap'; //название нашей команды

/**
* The console command description.
*
* @var string
*/
protected $description = 'Generation Sitemap.xml';//описание нашей команды

/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}

/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
//тут тело как-раз нашей функции
$site_url = "http :// nelex. in. ua";//уберите лишние пробелы
$base = '<?xml version="1.0" encoding="UTF-8"?>
            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
            </urlset>';
$xmlbase = new \SimpleXMLElement($base);
$row  = $xmlbase->addChild("url");
$row->addChild("loc",$site_url);
$row->addChild("lastmod",date("c"));
$row->addChild("changefreq","monthly");
$row->addChild("priority","1");
//выбираем нужные нам записи из базы данных
foreach (Blog::where("state","=","on")->where("xmlsitemap","=","yes")->get() as $result) {
$row  = $xmlbase->addChild("url");
$row->addChild("loc",$site_url.$result->getUrl());
$date = new DateTime($result->created_at);
$row->addChild("lastmod",$date->format("Y-m-d\TH:i:sP"));
$row->addChild("changefreq","monthly");
$row->addChild("priority","1");
}
//укажите путь куда нужно сохранять файл
$xmlbase->saveXML(app_path()."/sitemap.xml");
}
}
Генерировать новый sitemap будем каждый день в час ночи, для этого в файле app/Console/Kernel.php:
//...
class Kernel extends ConsoleKernel {

/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//'App\Console\Commands\Inspire',
'App\Console\Commands\XMLSitemap', //добавили нашу команду
];

/**
* Define the application's command schedule.
*
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
//$schedule->command('inspire')->hourly();
//добавили нашу задачу на выполнение каждый день в час ночи
$schedule->command('xmlsitemap')->dailyAt('01:00');
//для тестирования я выполнял так:
//$schedule->command('xmlsitemap')->cron('* * * * *')->sendOutputTo("/tmp/shed_log");
//в формате крон ежеминутно(каждый запуск) и вывод в файл
}
}
Вот собственно и все. Остается только поставить задачу в крон на ежеминутное выполнение, как и говориться в мануале:
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!