parent
1d38f51a3a
commit
41d4eac09f
@ -0,0 +1,125 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
|
||||||
|
namespace App\Http\Controllers; |
||||||
|
|
||||||
|
|
||||||
|
use App\Models\Table; |
||||||
|
use App\Models\User; |
||||||
|
use XMLWriter; |
||||||
|
|
||||||
|
class SitemapController extends Controller |
||||||
|
{ |
||||||
|
public function sitemap() |
||||||
|
{ |
||||||
|
ob_end_clean(); |
||||||
|
|
||||||
|
// Redirect output to a client’s web browser |
||||||
|
header("Content-Type: text/xml; charset=utf-8"); |
||||||
|
// Cache headers |
||||||
|
header('Cache-Control: max-age=0'); |
||||||
|
// IE9 |
||||||
|
header('Cache-Control: max-age=1'); |
||||||
|
// Other IE headers |
||||||
|
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past |
||||||
|
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified |
||||||
|
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 |
||||||
|
header('Pragma: no-cache'); // HTTP/1.0 |
||||||
|
|
||||||
|
$xmlWriter = new XMLWriter(); |
||||||
|
$xmlWriter->openURI('php://output'); |
||||||
|
$xmlWriter->startDocument('1.0', 'UTF-8'); |
||||||
|
$xmlWriter->setIndent(true); |
||||||
|
{ |
||||||
|
$xmlWriter->startElement('urlset'); |
||||||
|
{ |
||||||
|
$xmlWriter->writeAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); |
||||||
|
foreach ($this->iterateTables() as $entry) { |
||||||
|
$xmlWriter->startElement('url'); |
||||||
|
$xmlWriter->writeElement('loc', $entry->url); |
||||||
|
|
||||||
|
if (isset($entry->priority)) { |
||||||
|
$xmlWriter->writeElement('priority', $entry->priority); |
||||||
|
} |
||||||
|
|
||||||
|
if (isset($entry->changefreq)) { |
||||||
|
$xmlWriter->writeElement('changefreq', $entry->changefreq); |
||||||
|
} |
||||||
|
|
||||||
|
if (isset($entry->lastmodified)) { |
||||||
|
$xmlWriter->writeElement('lastmod', $entry->lastmodified->format(\DateTime::W3C)); |
||||||
|
} |
||||||
|
$xmlWriter->endElement(); |
||||||
|
} |
||||||
|
} |
||||||
|
$xmlWriter->endElement(); |
||||||
|
} |
||||||
|
$xmlWriter->endDocument(); |
||||||
|
} |
||||||
|
|
||||||
|
private function iterateTables() |
||||||
|
{ |
||||||
|
$prio_info = .9; |
||||||
|
$prio_user = .8; |
||||||
|
$prio_table = .6; |
||||||
|
$prio_table_rev = .5; |
||||||
|
$prio_misc = .5; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('dash'), |
||||||
|
'priority' => 1, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('terms'), |
||||||
|
'priority' => $prio_info, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('faq'), |
||||||
|
'priority' => $prio_info, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('donate'), |
||||||
|
'priority' => $prio_info, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('privacy'), |
||||||
|
'priority' => $prio_info, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('login'), |
||||||
|
'priority' => $prio_misc, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => route('register'), |
||||||
|
'priority' => $prio_misc, |
||||||
|
]; |
||||||
|
|
||||||
|
foreach (User::all() as $user) { |
||||||
|
yield (object)[ |
||||||
|
'url' => route('profile.view', $user->name), |
||||||
|
'lastmodified' => $user->updated_at, |
||||||
|
'priority' => $prio_user, |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
foreach (Table::all() as $table) { |
||||||
|
yield (object)[ |
||||||
|
'url' => $table->viewRoute, |
||||||
|
'lastmodified' => $table->updated_at, |
||||||
|
'priority' => $prio_table, |
||||||
|
]; |
||||||
|
|
||||||
|
yield (object)[ |
||||||
|
'url' => $table->revisionsRoute, |
||||||
|
'lastmodified' => $table->updated_at, |
||||||
|
'priority' => $prio_table_rev, |
||||||
|
]; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue