Initial commit: WitShop Laravel Online-Shop
- Laravel 11, Blade, Alpine.js, Tailwind CSS - Produkt- & Kategorieverwaltung mit Varianten - Checkout (Vorkasse + Rechnung), Session-Warenkorb - Admin-Backend (Dashboard, Bestellungen, Kunden, CMS) - DSGVO-konform: Cookie-Consent, Impressum, Widerruf, AGB - PDF-Rechnung via dompdf, SMTP-Mailversand - Kundenverwaltung mit manueller Freischaltung Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
@extends('layouts.admin')
|
||||
@section('title', isset($banner) ? 'Banner bearbeiten' : 'Neuer Banner')
|
||||
@section('content')
|
||||
<div class="max-w-xl">
|
||||
<form method="POST" action="{{ isset($banner) ? route('admin.banners.update', $banner) : route('admin.banners.store') }}" enctype="multipart/form-data" class="bg-white rounded shadow p-6 space-y-4">
|
||||
@csrf @if(isset($banner)) @method('PUT') @endif
|
||||
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Bild *</label>
|
||||
@if(isset($banner) && $banner->image)<img src="{{ asset('storage/'.$banner->image) }}" class="h-20 mb-2 rounded">@endif
|
||||
<input type="file" name="image" accept="image/*" {{ !isset($banner) ? 'required' : '' }} class="text-sm">
|
||||
</div>
|
||||
<div><label class="block text-sm font-medium mb-1">Überschrift</label><input type="text" name="headline" value="{{ old('headline', $banner->headline ?? '') }}" class="w-full border rounded px-3 py-2 text-sm"></div>
|
||||
<div><label class="block text-sm font-medium mb-1">Untertext</label><input type="text" name="subtext" value="{{ old('subtext', $banner->subtext ?? '') }}" class="w-full border rounded px-3 py-2 text-sm"></div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div><label class="block text-sm font-medium mb-1">Button-Text</label><input type="text" name="button_label" value="{{ old('button_label', $banner->button_label ?? '') }}" class="w-full border rounded px-3 py-2 text-sm"></div>
|
||||
<div><label class="block text-sm font-medium mb-1">Button-Link</label><input type="text" name="button_link" value="{{ old('button_link', $banner->button_link ?? '') }}" class="w-full border rounded px-3 py-2 text-sm"></div>
|
||||
</div>
|
||||
<div class="flex gap-4">
|
||||
<div><label class="block text-sm font-medium mb-1">Reihenfolge</label><input type="number" name="sort_order" value="{{ old('sort_order', $banner->sort_order ?? 0) }}" class="w-24 border rounded px-3 py-2 text-sm"></div>
|
||||
<div class="flex items-end pb-2"><label class="flex items-center gap-2 text-sm"><input type="checkbox" name="active" value="1" {{ old('active', $banner->active ?? true) ? 'checked' : '' }}> Aktiv</label></div>
|
||||
</div>
|
||||
<div class="flex gap-3 pt-2">
|
||||
<button type="submit" class="bg-blue-600 text-white px-5 py-2 rounded hover:bg-blue-700 text-sm">Speichern</button>
|
||||
<a href="{{ route('admin.banners.index') }}" class="px-5 py-2 rounded border text-sm hover:bg-gray-50">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,27 @@
|
||||
@extends('layouts.admin')
|
||||
@section('title', 'Banner')
|
||||
@section('content')
|
||||
<div class="flex justify-between items-center mb-6">
|
||||
<h2 class="text-lg font-semibold">Startseiten-Banner</h2>
|
||||
<a href="{{ route('admin.banners.create') }}" class="bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700 text-sm">+ Neuer Banner</a>
|
||||
</div>
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
@forelse($banners as $banner)
|
||||
<div class="bg-white rounded shadow overflow-hidden">
|
||||
@if($banner->image)<img src="{{ asset('storage/'.$banner->image) }}" class="w-full h-32 object-cover">@endif
|
||||
<div class="p-4">
|
||||
<p class="font-medium text-sm">{{ $banner->headline ?: '(kein Titel)' }}</p>
|
||||
<p class="text-xs text-gray-400">Reihenfolge: {{ $banner->sort_order }}</p>
|
||||
<div class="flex gap-2 mt-3">
|
||||
<a href="{{ route('admin.banners.edit', $banner) }}" class="text-blue-600 text-sm hover:underline">Bearbeiten</a>
|
||||
<form method="POST" action="{{ route('admin.banners.destroy', $banner) }}" onsubmit="return confirm('Löschen?')">
|
||||
@csrf @method('DELETE')<button class="text-red-600 text-sm hover:underline">Löschen</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<p class="col-span-3 text-gray-400">Keine Banner.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user