summaryrefslogtreecommitdiff
path: root/listeners/GenerateSitemap.php
diff options
context:
space:
mode:
Diffstat (limited to 'listeners/GenerateSitemap.php')
-rw-r--r--listeners/GenerateSitemap.php43
1 files changed, 43 insertions, 0 deletions
diff --git a/listeners/GenerateSitemap.php b/listeners/GenerateSitemap.php
new file mode 100644
index 0000000..6a439a6
--- /dev/null
+++ b/listeners/GenerateSitemap.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Listeners;
+
+use samdark\sitemap\Sitemap;
+use TightenCo\Jigsaw\Jigsaw;
+use Illuminate\Support\Str;
+
+class GenerateSitemap
+{
+ protected $exclude = [
+ '/assets/*',
+ '*/favicon.ico',
+ '*/404*'
+ ];
+
+ public function handle(Jigsaw $jigsaw)
+ {
+ $baseUrl = $jigsaw->getConfig('baseUrl');
+
+ if (! $baseUrl) {
+ echo("\nTo generate a sitemap.xml file, please specify a 'baseUrl' in config.php.\n\n");
+
+ return;
+ }
+
+ $sitemap = new Sitemap($jigsaw->getDestinationPath() . '/sitemap.xml');
+
+ collect($jigsaw->getOutputPaths())
+ ->reject(function ($path) {
+ return $this->isExcluded($path);
+ })->each(function ($path) use ($baseUrl, $sitemap) {
+ $sitemap->addItem(rtrim($baseUrl, '/') . $path, time(), Sitemap::DAILY);
+ });
+
+ $sitemap->write();
+ }
+
+ public function isExcluded($path)
+ {
+ return Str::is($this->exclude, $path);
+ }
+}