style updates
This commit is contained in:
@@ -1,3 +1,36 @@
|
||||
<?php
|
||||
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema;
|
||||
return new class extends Migration { public function up(): void { Schema::create('seo_metadata', function(Blueprint $table): void { $table->id(); $table->morphs('seoable'); $table->string('title')->nullable(); $table->text('description')->nullable(); $table->string('canonical_url')->nullable(); $table->string('robots')->default('index,follow'); $table->string('og_title')->nullable(); $table->text('og_description')->nullable(); $table->string('og_image')->nullable(); $table->string('twitter_card')->default('summary_large_image'); $table->string('schema_type')->nullable(); $table->json('schema_data')->nullable(); $table->boolean('include_in_sitemap')->default(true); $table->decimal('sitemap_priority',2,1)->default(0.5); $table->string('sitemap_change_frequency')->default('monthly'); $table->timestamps(); $table->unique(['seoable_type','seoable_id']); }); } public function down(): void { Schema::dropIfExists('seo_metadata'); } };
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('seo_metadata', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->morphs('seoable');
|
||||
$table->string('title')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->string('canonical_url')->nullable();
|
||||
$table->string('robots')->default('index,follow');
|
||||
$table->string('og_title')->nullable();
|
||||
$table->text('og_description')->nullable();
|
||||
$table->string('og_image')->nullable();
|
||||
$table->string('twitter_card')->default('summary_large_image');
|
||||
$table->string('schema_type')->nullable();
|
||||
$table->json('schema_data')->nullable();
|
||||
$table->boolean('include_in_sitemap')->default(true);
|
||||
$table->decimal('sitemap_priority', 2, 1)->default(0.5);
|
||||
$table->string('sitemap_change_frequency')->default('monthly');
|
||||
$table->timestamps();
|
||||
$table->unique(['seoable_type', 'seoable_id']);
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('seo_metadata');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,7 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Seo\Http\Controllers;
|
||||
use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Modules\Settings\Models\Setting;
|
||||
final class SeoController extends Controller {
|
||||
public function index(){ $values=Setting::where('group','seo')->pluck('value','key'); return view('seo::index',compact('values')); }
|
||||
public function update(Request $request){ $data=$request->validate(['site_title'=>['nullable','string','max:255'],'meta_description'=>['nullable','string','max:500'],'robots'=>['required','string','max:100'],'canonical_base'=>['nullable','url','max:255']]); foreach($data as $key=>$value) Setting::updateOrCreate(['group'=>'seo','key'=>$key],['value'=>$value,'type'=>'string','is_public'=>true]); return back()->with('status','SEO defaults saved.'); }
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\Settings\Models\Setting;
|
||||
|
||||
final class SeoController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$values = Setting::where('group', 'seo')->pluck('value', 'key');
|
||||
|
||||
return view('seo::index', compact('values'));
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$data = $request->validate(['site_title' => ['nullable', 'string', 'max:255'], 'meta_description' => ['nullable', 'string', 'max:500'], 'robots' => ['required', 'string', 'max:100'], 'canonical_base' => ['nullable', 'url', 'max:255']]);
|
||||
foreach ($data as $key => $value) {
|
||||
Setting::updateOrCreate(['group' => 'seo', 'key' => $key], ['value' => $value, 'type' => 'string', 'is_public' => true]);
|
||||
}
|
||||
|
||||
return back()->with('status', 'SEO defaults saved.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,17 @@
|
||||
<?php
|
||||
namespace Modules\Seo\Models; use Illuminate\Database\Eloquent\Model;
|
||||
final class SeoMetadata extends Model { protected $table='seo_metadata'; protected $guarded=[]; protected function casts(): array { return ['schema_data'=>'array','include_in_sitemap'=>'boolean','sitemap_priority'=>'decimal:1']; } }
|
||||
|
||||
namespace Modules\Seo\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
final class SeoMetadata extends Model
|
||||
{
|
||||
protected $table = 'seo_metadata';
|
||||
|
||||
protected $guarded = [];
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return ['schema_data' => 'array', 'include_in_sitemap' => 'boolean', 'sitemap_priority' => 'decimal:1'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
<?php
|
||||
use Illuminate\Support\Facades\Route; use Modules\Seo\Http\Controllers\SeoController;
|
||||
Route::middleware(['auth','verified'])->prefix('administration/seo')->name('administration.seo.')->group(function (): void { Route::get('/',[SeoController::class,'index'])->name('index'); Route::put('/',[SeoController::class,'update'])->name('update'); });
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Modules\Seo\Http\Controllers\SeoController;
|
||||
|
||||
Route::middleware(['auth', 'verified'])->prefix('administration/seo')->name('administration.seo.')->group(function (): void {
|
||||
Route::get('/', [SeoController::class, 'index'])->name('index');
|
||||
Route::put('/', [SeoController::class, 'update'])->name('update');
|
||||
});
|
||||
|
||||
@@ -4,6 +4,13 @@ namespace Modules\Seo\Support;
|
||||
|
||||
final class ModuleInfo
|
||||
{
|
||||
public static function name(): string { return 'Seo'; }
|
||||
public static function nameLower(): string { return 'seo'; }
|
||||
public static function name(): string
|
||||
{
|
||||
return 'Seo';
|
||||
}
|
||||
|
||||
public static function nameLower(): string
|
||||
{
|
||||
return 'seo';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user