summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid T. Sadler <davidtsadler@googlemail.com>2020-03-08 02:19:19 +0000
committerDavid T. Sadler <davidtsadler@googlemail.com>2020-03-08 02:19:19 +0000
commit8ee2f1b17cb2b95454e6686d9fe32dbcadcdb9dd (patch)
tree43d374a7f8d8a7bbb8b3a87290fcab4412086641
parentc3b94f34f2e3ead663999cb7723991abc4dfdbb4 (diff)
Add sitemap
-rw-r--r--bootstrap.php2
-rw-r--r--config.php2
-rw-r--r--listeners/GenerateSitemap.php43
3 files changed, 46 insertions, 1 deletions
diff --git a/bootstrap.php b/bootstrap.php
index 7d6e3c4..cdefc5b 100644
--- a/bootstrap.php
+++ b/bootstrap.php
@@ -13,3 +13,5 @@
* // Your code here
* });
*/
+
+$events->afterBuild(App\Listeners\GenerateSitemap::class);
diff --git a/config.php b/config.php
index 3f46230..495952e 100644
--- a/config.php
+++ b/config.php
@@ -3,7 +3,7 @@
use Illuminate\Support\Str;
return [
- 'baseUrl' => '',
+ 'baseUrl' => 'http://localhost:3000',
'production' => false,
'siteName' => 'davidtsadler.com',
'siteDescription' => 'My little bit of the Internet',
diff --git a/listeners/GenerateSitemap.php b/listeners/GenerateSitemap.php
new file mode 100644
index 0000000..b7f471e
--- /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);
+ }
+}