dev #8
71
app/Console/Commands/GenerateSitemap.php
Normal file
71
app/Console/Commands/GenerateSitemap.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Entry;
|
||||
use App\Models\News;
|
||||
use Illuminate\Console\Attributes\Signature;
|
||||
use Illuminate\Console\Command;
|
||||
use Spatie\Sitemap\Sitemap;
|
||||
use Spatie\Sitemap\Tags\Url;
|
||||
|
||||
#[Signature('sitemap:generate')]
|
||||
class GenerateSitemap extends Command
|
||||
{
|
||||
public function handle()
|
||||
{
|
||||
$sitemap = Sitemap::create()
|
||||
->add(Url::create('/')->setPriority(1.0)->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY))
|
||||
->add(Url::create('/database')->setPriority(0.8)->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY))
|
||||
->add(Url::create('/news')->setPriority(0.7)->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY))
|
||||
->add(Url::create(route('tools.patcher'))->setPriority(0.2)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY) )
|
||||
->add(Url::create(route('tools.hash'))->setPriority(0.2)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY) )
|
||||
;
|
||||
|
||||
Entry::cursor()->each(function (Entry $entry) use ($sitemap) {
|
||||
|
||||
if (empty($entry->type) || empty($entry->slug)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$url = route('entries.show', [
|
||||
'section' => $entry->type,
|
||||
'entry' => $entry->slug
|
||||
]);
|
||||
|
||||
$sitemap->add(
|
||||
Url::create($url)
|
||||
->setLastModificationDate($entry->updated_at)
|
||||
->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)
|
||||
->setPriority(0.8)
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
logger()->error("Sitemap error for entry : {$entry->id}: " . $e->getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
News::cursor()->each(function (News $entry) use ($sitemap) {
|
||||
|
||||
if (empty($entry->type) || empty($entry->slug)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$url = route('news.show', ['news' => $entry]);
|
||||
|
||||
$sitemap->add(
|
||||
Url::create($url)
|
||||
->setLastModificationDate($entry->updated_at)
|
||||
->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)
|
||||
->setPriority(0.8)
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
logger()->error("Sitemap error for news : {$entry->id}: " . $e->getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
$sitemap->writeToFile(public_path('sitemap.xml'));
|
||||
$this->info('Generated sitemap');
|
||||
}
|
||||
}
|
||||
@@ -87,10 +87,10 @@ class MigrateUsersExecute extends Command
|
||||
->leftJoin('usermeta as m2', fn( $j ) => $j->on('users.ID', '=', 'm2.user_id')->where('m2.meta_key', '=', 'wp_capabilities') )
|
||||
->leftJoin('usermeta as m3', fn( $j ) => $j->on('users.ID', '=', 'm3.user_id')->where('m3.meta_key', '=', 'simple_local_avatar') )
|
||||
->where('users.ID', '=', $plan->wp_user_id )
|
||||
->select('m1.meta_value as description', 'm2.meta_value as capabilities', 'm3.meta_value as avatar_meta', 'users.user_url as website', 'users.user_pass as password', 'users.user_registred' )
|
||||
->select('m1.meta_value as description', 'm2.meta_value as capabilities', 'm3.meta_value as avatar_meta', 'users.user_url as website', 'users.user_pass as password', 'users.user_registered' )
|
||||
->first();
|
||||
|
||||
$infos['register_date'] = $wp->user_registred ? strtotime($wp->user_registred) : null;
|
||||
$infos['register_date'] = $wp->user_registered ? strtotime($wp->user_registered) : null;
|
||||
$infos['profile']['about'] = $wp->description;
|
||||
$infos['profile']['website'] = $wp->website;
|
||||
$role = $this->extractWpRole($wp->capabilities);
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
protected function seoNoIndex(): void
|
||||
{
|
||||
SEOTools::metatags()->setRobots('noindex, nofollow');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,8 +5,11 @@ namespace App\Http\Controllers;
|
||||
use App\Helpers\EntryHelpers;
|
||||
use App\Models\Entry;
|
||||
use App\Models\News;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class EntryController extends Controller
|
||||
@@ -16,6 +19,7 @@ class EntryController extends Controller
|
||||
|
||||
public function index(): View
|
||||
{
|
||||
SEOTools::setTitle('Database');
|
||||
return view('entries.index');
|
||||
}
|
||||
|
||||
@@ -26,6 +30,7 @@ class EntryController extends Controller
|
||||
|
||||
public function show(string $section, Entry $entry): View
|
||||
{
|
||||
|
||||
if (!in_array($section, self::SECTION_TYPES))
|
||||
abort(404);
|
||||
|
||||
@@ -52,6 +57,13 @@ class EntryController extends Controller
|
||||
$comments = EntryHelpers::getLatestComments($entry);
|
||||
$reviews = $entry->reviews()->orderBy('created_at', 'desc')->limit(10)->get();
|
||||
|
||||
SEOTools::setTitle($entry->complete_title ?? $entry->title);
|
||||
SEOTools::setDescription( Str::limit( $entry->description, 150) );
|
||||
SEOTools::opengraph()->addProperty('type', 'article');
|
||||
if( $entry->main_image ){
|
||||
SEOTools::opengraph()->addImage( url( Storage::url( $entry->main_image ) ) );
|
||||
}
|
||||
|
||||
return view('entries.show', compact('entry', 'section', 'comments', 'reviews'));
|
||||
|
||||
}
|
||||
@@ -69,6 +81,7 @@ class EntryController extends Controller
|
||||
->orderBy('updated_at', 'desc')
|
||||
->paginate(20);
|
||||
|
||||
SEOTools::setTitle('My Drafts');
|
||||
return view('entries.drafts', compact('drafts', 'newsDrafts'));
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Entry;
|
||||
use App\Services\ActivityService;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
use App\Models\News;
|
||||
@@ -15,6 +16,8 @@ class HomeController extends Controller
|
||||
|
||||
public function index( Request $request ): View {
|
||||
|
||||
SEOTools::setTitle('A Romhack community where you can share your creations with the world.');
|
||||
|
||||
$filters = [ 'entries', 'news', 'messages', 'threads', 'clubs', 'reviews' ];
|
||||
|
||||
$cookie = $request->cookie('activity_filters');
|
||||
|
||||
@@ -4,10 +4,16 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Jobs\RestoreXenForoCommentsThread;
|
||||
use App\Models\Entry;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ModCPController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
SEOTools::setTitle('ModCP');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$stats = [
|
||||
|
||||
@@ -11,14 +11,18 @@ use App\Http\Requests\StoreNewsRequest;
|
||||
use App\Jobs\DeleteXenForoCommentsThread;
|
||||
use App\Models\News;
|
||||
use App\Services\NewsService;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class NewsController extends Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
SEOTools::setTitle('News');
|
||||
return view('news.index');
|
||||
}
|
||||
|
||||
@@ -43,6 +47,13 @@ class NewsController extends Controller
|
||||
|
||||
$comments = EntryHelpers::getLatestComments($news);
|
||||
|
||||
SEOTools::setTitle($news->title);
|
||||
SEOTools::setDescription( Str::limit( $news->description , 150 ) );
|
||||
SEOTools::opengraph()->addProperty('type', 'article');
|
||||
if( $news->gallery->first() ){
|
||||
SEOTools::opengraph()->addImage( url( Storage::url( $news->gallery->first()->image ) ) );
|
||||
}
|
||||
|
||||
return view('news.show', compact('news', 'comments'));
|
||||
}
|
||||
|
||||
@@ -54,6 +65,7 @@ class NewsController extends Controller
|
||||
'oldCategory' => old('category') ? [ old('category') ] : []
|
||||
];
|
||||
|
||||
SEOTools::setTitle('Submit News');
|
||||
return view ('news.create', $data);
|
||||
}
|
||||
|
||||
@@ -65,6 +77,7 @@ class NewsController extends Controller
|
||||
'oldCategory' => old('category', $news->category_id) ? [ old('category', $news->category_id) ] : []
|
||||
];
|
||||
|
||||
SEOTools::setTitle('Edit News');
|
||||
return view ('news.edit', $data);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Helpers\XenForoHelpers;
|
||||
use App\Models\Entry;
|
||||
use App\Models\News;
|
||||
use App\Services\XenforoService;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
class QueueController extends Controller
|
||||
{
|
||||
@@ -35,6 +36,7 @@ class QueueController extends Controller
|
||||
return $a->created_at <=> $b->created_at;
|
||||
})->values();
|
||||
|
||||
SEOTools::setTitle('Submissions Queue');
|
||||
return view('queue.index', compact('entries'));
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Exceptions\SubmissionException;
|
||||
use App\Http\Requests\StoreReviewRequest;
|
||||
use App\Models\Entry;
|
||||
use App\Services\ReviewsService;
|
||||
use Artesaos\SEOTools\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ReviewController extends Controller
|
||||
@@ -15,6 +16,7 @@ class ReviewController extends Controller
|
||||
|
||||
public function index(){
|
||||
|
||||
SEOTools::setTitle('Reviews');
|
||||
return view('reviews.index');
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ use App\Models\Status;
|
||||
use App\Models\System;
|
||||
use App\Services\SubmissionsService;
|
||||
use App\Services\XenforoApiService;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
@@ -86,6 +87,7 @@ class SubmissionController extends Controller
|
||||
'border' => '#eed6c540',
|
||||
] ];
|
||||
|
||||
SEOTools::setTitle('Submit');
|
||||
return view('submissions.index', compact('entryTypes'));
|
||||
}
|
||||
|
||||
@@ -119,6 +121,7 @@ class SubmissionController extends Controller
|
||||
$data['levels'] = Level::orderBy('id')->get();
|
||||
}
|
||||
|
||||
SEOTools::setTitle( $data['words']['page_title'] );
|
||||
return view('submissions.create', $data);
|
||||
}
|
||||
|
||||
@@ -156,6 +159,7 @@ class SubmissionController extends Controller
|
||||
$data['levels'] = Level::orderBy('id')->get();
|
||||
}
|
||||
|
||||
SEOTools::setTitle( $data['words']['page_title'] );
|
||||
return view('submissions.edit', $data);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
||||
use App\Models\Entry;
|
||||
use App\Models\EntryFile;
|
||||
use App\Services\FileServersService;
|
||||
use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ToolsController extends Controller
|
||||
@@ -31,7 +32,7 @@ class ToolsController extends Controller
|
||||
];
|
||||
|
||||
|
||||
|
||||
SEOTools::setTitle('ROM Patcher');
|
||||
return view('tools.patcher', compact('patches'));
|
||||
}
|
||||
|
||||
@@ -59,11 +60,13 @@ class ToolsController extends Controller
|
||||
'outputName' => $file->filename
|
||||
];
|
||||
|
||||
SEOTools::setTitle('Play online');
|
||||
return view('tools.play', compact('patches', 'emuConfig'));
|
||||
}
|
||||
|
||||
public function hasher( Request $request )
|
||||
{
|
||||
SEOTools::setTitle('Play online');
|
||||
return view('tools.hasher');
|
||||
}
|
||||
|
||||
|
||||
@@ -29,8 +29,10 @@ class XenforoApiService {
|
||||
'XF-Api-User' => $customUserId ?? $this->superUserId,
|
||||
])->get("{$this->apiUrl}/{$endpoint}");
|
||||
|
||||
if( !$response->ok() )
|
||||
if( !$response->ok() ) {
|
||||
\Illuminate\Support\Facades\Log::error("XF API error [{$response->status()}] on {$endpoint}: " . $response->body());
|
||||
return null;
|
||||
}
|
||||
|
||||
return $response->json();
|
||||
}
|
||||
@@ -42,8 +44,10 @@ class XenforoApiService {
|
||||
'XF-Api-User' => $customUserId ?? $this->superUserId,
|
||||
])->post("{$this->apiUrl}/{$endpoint}", $data);
|
||||
|
||||
if( !$response->ok() )
|
||||
if( !$response->ok() ) {
|
||||
\Illuminate\Support\Facades\Log::error("XF API error [{$response->status()}] on {$endpoint}: " . $response->body());
|
||||
return null;
|
||||
}
|
||||
|
||||
return $response->json();
|
||||
}
|
||||
@@ -55,8 +59,10 @@ class XenforoApiService {
|
||||
'XF-Api-User' => $customUserId ?? $this->superUserId,
|
||||
])->delete("{$this->apiUrl}/{$endpoint}", $data);
|
||||
|
||||
if( !$response->ok() )
|
||||
if( !$response->ok() ) {
|
||||
\Illuminate\Support\Facades\Log::error("XF API error [{$response->status()}] on {$endpoint}: " . $response->body());
|
||||
return null;
|
||||
}
|
||||
|
||||
return $response->json();
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"ext-pdo": "*",
|
||||
"ext-simplexml": "*",
|
||||
"ext-xmlreader": "*",
|
||||
"artesaos/seotools": "^1.4",
|
||||
"diglactic/laravel-breadcrumbs": "^10.1",
|
||||
"filament/filament": "^5.6",
|
||||
"laravel/framework": "^13.7",
|
||||
@@ -18,7 +19,8 @@
|
||||
"league/html-to-markdown": "^5.1",
|
||||
"livewire/livewire": "^4.3",
|
||||
"predis/predis": "^3.4",
|
||||
"spatie/laravel-activitylog": "^5.0"
|
||||
"spatie/laravel-activitylog": "^5.0",
|
||||
"spatie/laravel-sitemap": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"barryvdh/laravel-debugbar": "^4.2",
|
||||
|
||||
356
composer.lock
generated
356
composer.lock
generated
@@ -4,8 +4,79 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ea9258b1759d46665d2487b066c686ee",
|
||||
"content-hash": "6ebcacd70675cd6b17a9428bb0050a51",
|
||||
"packages": [
|
||||
{
|
||||
"name": "artesaos/seotools",
|
||||
"version": "v1.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/artesaos/seotools.git",
|
||||
"reference": "c92d09f0ad4491181863850a3ab2e1534361409b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/artesaos/seotools/zipball/c92d09f0ad4491181863850a3ab2e1534361409b",
|
||||
"reference": "c92d09f0ad4491181863850a3ab2e1534361409b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"illuminate/config": "^10.0 || ^11.0 || ^12.0 || ^13.0",
|
||||
"illuminate/support": "^10.0 || ^11.0 || ^12.0 || ^13.0",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"orchestra/testbench": "^8.0 || ^9.0 || ^10.0 || ^11.0",
|
||||
"phpunit/phpunit": "^9.0 || ^10.0 || ^11.5.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"SEO": "Artesaos\\SEOTools\\Facades\\SEOTools",
|
||||
"JsonLd": "Artesaos\\SEOTools\\Facades\\JsonLd",
|
||||
"SEOMeta": "Artesaos\\SEOTools\\Facades\\SEOMeta",
|
||||
"Twitter": "Artesaos\\SEOTools\\Facades\\TwitterCard",
|
||||
"OpenGraph": "Artesaos\\SEOTools\\Facades\\OpenGraph"
|
||||
},
|
||||
"providers": [
|
||||
"Artesaos\\SEOTools\\Providers\\SEOToolsServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Artesaos\\SEOTools\\": "src/SEOTools/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Vinicius",
|
||||
"email": "luiz.vinicius73@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "SEO Tools for Laravel and Lumen",
|
||||
"keywords": [
|
||||
"JSON-LD",
|
||||
"laravel",
|
||||
"lumen",
|
||||
"metatags",
|
||||
"opengraph",
|
||||
"seo",
|
||||
"seotools",
|
||||
"webmaster"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/artesaos/seotools/issues",
|
||||
"source": "https://github.com/artesaos/seotools"
|
||||
},
|
||||
"time": "2026-03-28T12:37:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "blade-ui-kit/blade-heroicons",
|
||||
"version": "2.7.0",
|
||||
@@ -5303,6 +5374,85 @@
|
||||
],
|
||||
"time": "2022-12-17T21:53:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/crawler",
|
||||
"version": "9.3.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/crawler.git",
|
||||
"reference": "3b3a9a1a8c750b0240c2b7c9e2ef22e84092416e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/crawler/zipball/3b3a9a1a8c750b0240c2b7c9e2ef22e84092416e",
|
||||
"reference": "3b3a9a1a8c750b0240c2b7c9e2ef22e84092416e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^7.3",
|
||||
"guzzlehttp/psr7": "^2.0",
|
||||
"php": "^8.4",
|
||||
"spatie/robots-txt": "^2.0",
|
||||
"symfony/css-selector": "^7.0|^8.0",
|
||||
"symfony/dom-crawler": "^7.0|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"pestphp/pest": "^4.0",
|
||||
"phpstan/extension-installer": "^1.4",
|
||||
"phpstan/phpstan": "^2.0",
|
||||
"phpstan/phpstan-deprecation-rules": "^2.0",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"spatie/invade": "^2.1",
|
||||
"spatie/ray": "^1.37"
|
||||
},
|
||||
"suggest": {
|
||||
"spatie/browsershot": "Required for JavaScript rendering with BrowsershotRenderer (^5.0.5)"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-v9": "9.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Spatie\\Crawler\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Freek Van der Herten",
|
||||
"email": "freek@spatie.be"
|
||||
}
|
||||
],
|
||||
"description": "Crawl all internal links found on a website",
|
||||
"homepage": "https://github.com/spatie/crawler",
|
||||
"keywords": [
|
||||
"crawler",
|
||||
"link",
|
||||
"spatie",
|
||||
"website"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/spatie/crawler/issues",
|
||||
"source": "https://github.com/spatie/crawler/tree/9.3.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://spatie.be/open-source/support-us",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/spatie",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-06-12T15:45:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/invade",
|
||||
"version": "2.1.0",
|
||||
@@ -5516,6 +5666,140 @@
|
||||
],
|
||||
"time": "2026-02-21T12:49:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-sitemap",
|
||||
"version": "8.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/laravel-sitemap.git",
|
||||
"reference": "51f52030ab22abf5e95ed037fea5f8073114e784"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/51f52030ab22abf5e95ed037fea5f8073114e784",
|
||||
"reference": "51f52030ab22abf5e95ed037fea5f8073114e784",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/support": "^12.0|^13.0",
|
||||
"nesbot/carbon": "^2.71|^3.0",
|
||||
"php": "^8.4",
|
||||
"spatie/crawler": "^9.0",
|
||||
"spatie/laravel-package-tools": "^1.16.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"larastan/larastan": "^3.0",
|
||||
"laravel/pint": "^1.13",
|
||||
"orchestra/testbench": "^10.0|^11.0",
|
||||
"pestphp/pest": "^4.0",
|
||||
"phpstan/extension-installer": "^1.3",
|
||||
"phpstan/phpstan-deprecation-rules": "^2.0",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"spatie/pest-plugin-snapshots": "^2.1",
|
||||
"spatie/temporary-directory": "^2.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Spatie\\Sitemap\\SitemapServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Spatie\\Sitemap\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Freek Van der Herten",
|
||||
"email": "freek@spatie.be",
|
||||
"homepage": "https://spatie.be",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Create and generate sitemaps with ease",
|
||||
"homepage": "https://github.com/spatie/laravel-sitemap",
|
||||
"keywords": [
|
||||
"laravel-sitemap",
|
||||
"spatie"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/spatie/laravel-sitemap/tree/8.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://spatie.be/open-source/support-us",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2026-06-24T07:59:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/robots-txt",
|
||||
"version": "2.5.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/spatie/robots-txt.git",
|
||||
"reference": "a8dd35d0a94e863f52509a366a634978e9c1db03"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/spatie/robots-txt/zipball/a8dd35d0a94e863f52509a366a634978e9c1db03",
|
||||
"reference": "a8dd35d0a94e863f52509a366a634978e9c1db03",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^11.5.2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Spatie\\Robots\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Brent Roose",
|
||||
"email": "brent@spatie.be",
|
||||
"homepage": "https://spatie.be",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Determine if a page may be crawled from robots.txt and robots meta tags",
|
||||
"homepage": "https://github.com/spatie/robots-txt",
|
||||
"keywords": [
|
||||
"robots-txt",
|
||||
"spatie"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/spatie/robots-txt/issues",
|
||||
"source": "https://github.com/spatie/robots-txt/tree/2.5.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://spatie.be/open-source/support-us",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/spatie",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-02-25T07:59:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/shiki-php",
|
||||
"version": "2.4.0",
|
||||
@@ -5888,6 +6172,76 @@
|
||||
],
|
||||
"time": "2026-04-13T15:52:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
"version": "v8.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dom-crawler.git",
|
||||
"reference": "77ca351474ea018daba5f2e473cbf1b9b8e72ac6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/77ca351474ea018daba5f2e473cbf1b9b8e72ac6",
|
||||
"reference": "77ca351474ea018daba5f2e473cbf1b9b8e72ac6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.4.1",
|
||||
"symfony/polyfill-ctype": "^1.8",
|
||||
"symfony/polyfill-mbstring": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/css-selector": "^7.4|^8.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\DomCrawler\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Eases DOM navigation for HTML and XML documents",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/dom-crawler/tree/v8.1.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-05-29T05:06:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/error-handler",
|
||||
"version": "v8.0.8",
|
||||
|
||||
69
config/seotools.php
Normal file
69
config/seotools.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* @see https://github.com/artesaos/seotools
|
||||
*/
|
||||
|
||||
return [
|
||||
'inertia' => env('SEO_TOOLS_INERTIA', false),
|
||||
'meta' => [
|
||||
/*
|
||||
* The default configurations to be used by the meta generator.
|
||||
*/
|
||||
'defaults' => [
|
||||
'title' => "Romhack Plaza", // set false to total remove
|
||||
'titleBefore' => false, // Put defaults.title before page title, like 'It's Over 9000! - Dashboard'
|
||||
'description' => 'A Romhack community where you can share your creations with the world.', // set false to total remove
|
||||
'separator' => ' - ',
|
||||
'keywords' => [],
|
||||
'canonical' => 'current', // Set to null or 'full' to use Url::full(), set to 'current' to use Url::current(), set false to total remove
|
||||
'robots' => 'index, follow', // Set to 'all', 'none' or any combination of index/noindex and follow/nofollow
|
||||
],
|
||||
/*
|
||||
* Webmaster tags are always added.
|
||||
*/
|
||||
'webmaster_tags' => [
|
||||
'google' => null,
|
||||
'bing' => null,
|
||||
'alexa' => null,
|
||||
'pinterest' => null,
|
||||
'yandex' => null,
|
||||
'norton' => null,
|
||||
],
|
||||
|
||||
'add_notranslate_class' => false,
|
||||
],
|
||||
'opengraph' => [
|
||||
/*
|
||||
* The default configurations to be used by the opengraph generator.
|
||||
*/
|
||||
'defaults' => [
|
||||
'title' => 'Romhack Plaza', // set false to total remove
|
||||
'description' => 'A Romhack community where you can share your creations with the world.', // set false to total remove
|
||||
'url' => null, // Set null for using Url::current(), set false to total remove
|
||||
'type' => 'website',
|
||||
'site_name' => 'Romhack Plaza',
|
||||
'images' => [ 'logo/plaza-logo.png' ],
|
||||
],
|
||||
],
|
||||
'twitter' => [
|
||||
/*
|
||||
* The default values to be used by the twitter cards generator.
|
||||
*/
|
||||
'defaults' => [
|
||||
'card' => 'summary_large_image',
|
||||
'site' => '@romhackplaza'
|
||||
],
|
||||
],
|
||||
'json-ld' => [
|
||||
/*
|
||||
* The default configurations to be used by the json-ld generator.
|
||||
*/
|
||||
'defaults' => [
|
||||
'title' => 'Romhack Plaza', // set false to total remove
|
||||
'description' => 'A Romhack community where you can share your creations with the world.', // set false to total remove
|
||||
'url' => 'current', // Set to null or 'full' to use Url::full(), set to 'current' to use Url::current(), set false to total remove
|
||||
'type' => 'WebPage',
|
||||
'images' => [ 'logo/plaza-logo.png' ],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -3,11 +3,11 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{!! SEO::generate() !!}
|
||||
@include('meta')
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
@livewireStyles
|
||||
@stack('styles')
|
||||
<title>@yield('page-title', 'Romhack Plaza')</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user