Add show_in_nav option for categories in top menu
Deploy to Production (witstore.wende.it) / deploy (push) Successful in 6s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 19:16:12 +02:00
co-authored by Claude Sonnet 4.6
parent f1addad742
commit 4916edab7f
5 changed files with 42 additions and 2 deletions
@@ -32,6 +32,7 @@ class CategoryController extends Controller
]);
$data['slug'] = Str::slug($data['name']);
$data['active'] = $request->boolean('active');
$data['show_in_nav'] = $request->boolean('show_in_nav');
if ($request->hasFile('image')) {
$data['image'] = $request->file('image')->store('categories', 'public');
@@ -58,6 +59,7 @@ class CategoryController extends Controller
]);
$data['slug'] = Str::slug($data['name']);
$data['active'] = $request->boolean('active');
$data['show_in_nav'] = $request->boolean('show_in_nav');
if ($request->hasFile('image')) {
$data['image'] = $request->file('image')->store('categories', 'public');
+2 -2
View File
@@ -8,9 +8,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Category extends Model
{
protected $fillable = ['parent_id','name','slug','description','image','sort_order','active'];
protected $fillable = ['parent_id','name','slug','description','image','sort_order','active','show_in_nav'];
protected $casts = ['active' => 'boolean'];
protected $casts = ['active' => 'boolean', 'show_in_nav' => 'boolean'];
public function parent(): BelongsTo
{
@@ -0,0 +1,22 @@
<?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::table('categories', function (Blueprint $table) {
$table->boolean('show_in_nav')->default(false)->after('active');
});
}
public function down(): void
{
Schema::table('categories', function (Blueprint $table) {
$table->dropColumn('show_in_nav');
});
}
};
@@ -43,6 +43,10 @@
<input type="checkbox" name="active" id="active" value="1" {{ old('active', $category->active ?? true) ? 'checked' : '' }}>
<label for="active" class="text-sm">Aktiv</label>
</div>
<div class="flex items-end gap-2 pb-2">
<input type="checkbox" name="show_in_nav" id="show_in_nav" value="1" {{ old('show_in_nav', $category->show_in_nav ?? false) ? 'checked' : '' }}>
<label for="show_in_nav" class="text-sm">Im Top-Menü anzeigen</label>
</div>
</div>
<div class="flex gap-3 pt-2">
+12
View File
@@ -33,6 +33,11 @@
->orderBy('nav_sort')
->orderBy('title')
->get();
$navCategories = \App\Models\Category::whereNull('parent_id')
->where('active', true)
->where('show_in_nav', true)
->orderBy('sort_order')
->get();
@endphp
{{-- Header: Logo-Leiste --}}
@@ -57,6 +62,13 @@
class="px-3 py-2 rounded-lg text-sm font-medium text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition">
Alle Produkte
</a>
@foreach($navCategories as $navCat)
<a href="{{ route('shop.category', $navCat->slug) }}"
class="px-3 py-2 rounded-lg text-sm font-medium text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition
{{ request()->route('slug') === $navCat->slug ? 'bg-blue-50 text-blue-700' : '' }}">
{{ $navCat->name }}
</a>
@endforeach
@foreach($navPages as $navPage)
<a href="{{ route('page', $navPage->slug) }}"
class="px-3 py-2 rounded-lg text-sm font-medium text-gray-700 hover:bg-blue-50 hover:text-blue-700 transition