static export

Stancy integrates spatie/laravel-export to export your pages as static files.

Configuration

We recommend to disable the crawl option and export only listed paths/pages. The paths option can be empty if you only want to export feeds and/or pages. But you also can add additional paths, like the sitemap, to export.

config/export.php
<?php
return [
// to only export listed paths/pages
'crawl' => false,
'paths' => [
'/sitemap.xml',
],
];

prepare Pages

By default you can't export any page, only the feeds. To allow page export you have to implement the \Astrotomic\Stancy\Contracts\Routable interface in your page data class. This interface is also good to add your pages to a sitemap and feeds.

app/Pages/Home.php
<?php
namespace App\Pages;
use Astrotomic\Stancy\Contracts\Routable;
use Astrotomic\Stancy\Models\PageData;
class Home extends PageData implements Routable
{
public function getUrl(): string
{
return url('/');
}
}

ExportFactory

To add your pages programmatically you should use a service provider. This service provider should be the last or at least after \App\Providers\RouteServiceProvider in your app.providers configuration. In the service provider you should use the boot() method where you can inject the \Astrotomic\Stancy\Contracts\ExportFactory service and add a new booted event listener.

app/Providers/ExportServiceProvider.php
<?php
namespace App\Providers;
use Astrotomic\Stancy\Contracts\ExportFactory as ExportFactoryContract;
use Illuminate\Support\ServiceProvider;
class ExportServiceProvider extends ServiceProvider
{
public function boot(ExportFactoryContract $exportFactory)
{
$this->app->booted(function () use ($exportFactory) {
$exportFactory
->addFeeds()
->addSheetList(['static:home', 'static:blog'])
->addSheetCollectionName('blog')
;
});
}
}

This service provider will add all feeds, blog posts and the home and blog static pages.