diff --git a/app/Http/Controllers/Admin/ReferenceController.php b/app/Http/Controllers/Admin/ReferenceController.php new file mode 100644 index 0000000..5b1f21f --- /dev/null +++ b/app/Http/Controllers/Admin/ReferenceController.php @@ -0,0 +1,48 @@ +orderBy('sort_order')->get()->groupBy('category'); + $categories = ReferenceArticle::categories(); + return view('admin.reference.index', compact('articles','categories')); + } + public function create() { + $categories = ReferenceArticle::categories(); + return view('admin.reference.create', compact('categories')); + } + public function store(Request $r) { + $r->validate(['title'=>'required|string|max:120','category'=>'required|in:deutsch,mathe,englisch','icon'=>'required|string|max:8','content'=>'required|string']); + ReferenceArticle::create([ + 'title' => $r->title, + 'slug' => Str::slug($r->title).'-'.uniqid(), + 'category' => $r->category, + 'icon' => $r->icon, + 'content' => $r->content, + 'sort_order' => (int)$r->sort_order, + ]); + return redirect()->route('admin.reference.index')->with('success','Artikel erstellt.'); + } + public function edit(ReferenceArticle $reference) { + $categories = ReferenceArticle::categories(); + return view('admin.reference.edit', compact('reference','categories')); + } + public function update(Request $r, ReferenceArticle $reference) { + $r->validate(['title'=>'required|string|max:120','category'=>'required|in:deutsch,mathe,englisch','icon'=>'required|string|max:8','content'=>'required|string']); + $reference->update([ + 'title' => $r->title, + 'category' => $r->category, + 'icon' => $r->icon, + 'content' => $r->content, + 'sort_order' => (int)$r->sort_order, + ]); + return redirect()->route('admin.reference.index')->with('success','Gespeichert.'); + } + public function destroy(ReferenceArticle $reference) { + $reference->delete(); + return redirect()->route('admin.reference.index')->with('success','Artikel gelöscht.'); + } +} diff --git a/app/Http/Controllers/Child/ReferenceController.php b/app/Http/Controllers/Child/ReferenceController.php new file mode 100644 index 0000000..62357a8 --- /dev/null +++ b/app/Http/Controllers/Child/ReferenceController.php @@ -0,0 +1,16 @@ +get()->groupBy('category'); + $categories = ReferenceArticle::categories(); + return view('child.reference.index', compact('articles','categories')); + } + public function show(ReferenceArticle $reference) { + $others = ReferenceArticle::where('category', $reference->category) + ->where('id','!=',$reference->id)->orderBy('sort_order')->get(); + return view('child.reference.show', compact('reference','others')); + } +} diff --git a/app/Models/ReferenceArticle.php b/app/Models/ReferenceArticle.php new file mode 100644 index 0000000..9d31c26 --- /dev/null +++ b/app/Models/ReferenceArticle.php @@ -0,0 +1,9 @@ + '📖 Deutsch', 'mathe' => '🔢 Mathe', 'englisch' => '🌍 Englisch']; + } +} diff --git a/database/migrations/2026_05_05_210000_create_reference_articles_table.php b/database/migrations/2026_05_05_210000_create_reference_articles_table.php new file mode 100644 index 0000000..68164f1 --- /dev/null +++ b/database/migrations/2026_05_05_210000_create_reference_articles_table.php @@ -0,0 +1,19 @@ +id(); + $table->string('title'); + $table->string('slug')->unique(); + $table->enum('category', ['deutsch','mathe','englisch']); + $table->string('icon')->default('📖'); + $table->text('content'); + $table->unsignedSmallInteger('sort_order')->default(0); + $table->timestamps(); + }); + } + public function down(): void { Schema::dropIfExists('reference_articles'); } +}; diff --git a/resources/css/app.css b/resources/css/app.css index b5c61c9..e86bd70 100755 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,3 +1,18 @@ @tailwind base; @tailwind components; @tailwind utilities; + +/* Reference article content */ +.ref-content h2 { font-size:1.15rem; font-weight:700; color:#1e293b; margin:1.4rem 0 .5rem; padding-bottom:.3rem; border-bottom:2px solid #e2e8f0; } +.ref-content h3 { font-size:1rem; font-weight:600; color:#334155; margin:1rem 0 .35rem; } +.ref-content p { color:#475569; line-height:1.7; margin:.4rem 0; } +.ref-content ul, .ref-content ol { padding-left:1.4rem; margin:.4rem 0; color:#475569; } +.ref-content li { margin:.25rem 0; line-height:1.6; } +.ref-content strong { color:#1e293b; } +.ref-content .beispiel { background:#f0fdf4; border-left:3px solid #22c55e; padding:.6rem 1rem; border-radius:0 .5rem .5rem 0; margin:.6rem 0; font-size:.92rem; } +.ref-content .tipp { background:#fefce8; border-left:3px solid #eab308; padding:.6rem 1rem; border-radius:0 .5rem .5rem 0; margin:.6rem 0; font-size:.92rem; } +.ref-content .merke { background:#eff6ff; border-left:3px solid #3b82f6; padding:.6rem 1rem; border-radius:0 .5rem .5rem 0; margin:.6rem 0; font-size:.92rem; } +.ref-content table { width:100%; border-collapse:collapse; margin:.6rem 0; font-size:.9rem; } +.ref-content th { background:#f1f5f9; text-align:left; padding:.4rem .7rem; font-weight:600; color:#334155; border:1px solid #e2e8f0; } +.ref-content td { padding:.4rem .7rem; border:1px solid #e2e8f0; color:#475569; } +.ref-content tr:nth-child(even) td { background:#f8fafc; } diff --git a/resources/views/admin/reference/create.blade.php b/resources/views/admin/reference/create.blade.php new file mode 100644 index 0000000..0c54e46 --- /dev/null +++ b/resources/views/admin/reference/create.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.admin') +@section('title','Neuer Artikel') +@section('content') +
Hier kannst du nachschauen, was du gerade nicht mehr weißt.
+@foreach($categories as $key => $label) +@php $group = $articles->get($key, collect()) @endphp +@if($group->count()) +