From 8a02c512c26f4d982167226b3bef2484b316ac1c Mon Sep 17 00:00:00 2001 From: MuzakkiABBAUF Date: Thu, 18 Sep 2025 11:38:26 +0700 Subject: [PATCH] fix radio & checkbox --- .../app/Http/Controllers/FiturController.php | 32 +- .../Http/Controllers/TemplateController.php | 61 ++- backend/app/Models/Fitur.php | 8 +- backend/app/Models/KategoriFitur.php | 6 + .../views/admin/fitur/index.blade.php | 85 ++-- .../views/admin/templates/index.blade.php | 434 +++++++++++------- 6 files changed, 387 insertions(+), 239 deletions(-) diff --git a/backend/app/Http/Controllers/FiturController.php b/backend/app/Http/Controllers/FiturController.php index fa0f865..a1a5391 100644 --- a/backend/app/Http/Controllers/FiturController.php +++ b/backend/app/Http/Controllers/FiturController.php @@ -1,30 +1,27 @@ paginate(5); - $kategoriFiturs = KategoriFitur::all(); + public function index() + { + $fitur = Fitur::with('kategoriFitur')->paginate(5); + $kategoriFiturs = KategoriFitur::all(); - return view('admin.fitur.index', compact('fitur', 'kategoriFiturs')); -} + return view('admin.fitur.index', compact('fitur', 'kategoriFiturs')); + } - // Simpan fitur baru public function store(Request $request) { $request->validate([ 'deskripsi' => 'required|string|max:255', 'harga' => 'required|numeric|min:0', - 'kategori_fitur_id' => 'required|exists:kategori_fitur,id', + 'kategori_fitur_id' => 'nullable|exists:kategori_fitur,id', ]); Fitur::create([ @@ -33,32 +30,35 @@ public function index() 'kategori_fitur_id' => $request->kategori_fitur_id, ]); - return redirect()->route('admin.fitur.index')->with('success', 'Fitur berhasil ditambahkan'); + return redirect()->route('admin.fitur.index') + ->with('success', 'Fitur berhasil ditambahkan'); } - // Update fitur public function update(Request $request, $id) { $request->validate([ 'deskripsi' => 'required|string|max:255', 'harga' => 'required|numeric|min:0', + 'kategori_fitur_id' => 'nullable|exists:kategori_fitur,id', ]); $fitur = Fitur::findOrFail($id); $fitur->update([ 'deskripsi' => $request->deskripsi, 'harga' => $request->harga, + 'kategori_fitur_id' => $request->kategori_fitur_id, ]); - return redirect()->route('admin.fitur.index')->with('success', 'Fitur berhasil diperbarui'); + return redirect()->route('admin.fitur.index') + ->with('success', 'Fitur berhasil diperbarui'); } - // Hapus fitur public function destroy($id) { $fitur = Fitur::findOrFail($id); $fitur->delete(); - return redirect()->route('admin.fitur.index')->with('success', 'Fitur berhasil dihapus'); + return redirect()->route('admin.fitur.index') + ->with('success', 'Fitur berhasil dihapus'); } } diff --git a/backend/app/Http/Controllers/TemplateController.php b/backend/app/Http/Controllers/TemplateController.php index 16f51e2..7d76b69 100644 --- a/backend/app/Http/Controllers/TemplateController.php +++ b/backend/app/Http/Controllers/TemplateController.php @@ -5,20 +5,35 @@ namespace App\Http\Controllers; use App\Models\Template; use App\Models\Kategori; use App\Models\Fitur; +use App\Models\KategoriFitur; // <-- tambah ini use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; class TemplateController extends Controller { - public function index() - { - // eager load fiturs & kategori - $templates = Template::with(['kategori', 'fiturs'])->paginate(5); - $kategoris = Kategori::all(); - $fiturs = Fitur::all(); + public function index() +{ + $templates = Template::with(['kategori', 'fiturs'])->paginate(5); + $kategoris = Kategori::all(); + + // semua fitur dengan relasi kategori + $fiturs = Fitur::with('kategoriFitur')->get(); + + // kategori fitur beserta fiturnya + $kategoriFiturs = KategoriFitur::with('fiturs')->get(); + + // fitur yang tidak punya kategori + $fitursTanpaKategori = Fitur::whereNull('kategori_fitur_id')->get(); + + return view('admin.templates.index', compact( + 'templates', + 'kategoris', + 'fiturs', + 'kategoriFiturs', + 'fitursTanpaKategori' + )); +} - return view('admin.templates.index', compact('templates', 'kategoris', 'fiturs')); - } public function show($id) { @@ -108,15 +123,25 @@ class TemplateController extends Controller return redirect()->route('templates.index')->with('success', 'Template berhasil dihapus!'); } - public function byKategori($id) - { - $kategori = Kategori::findOrFail($id); - $templates = Template::with(['kategori', 'fiturs']) - ->where('kategori_id', $id) - ->paginate(5); - $kategoris = Kategori::all(); - $fiturs = Fitur::all(); + public function byKategori($id) +{ + $kategori = Kategori::findOrFail($id); + $templates = Template::with(['kategori', 'fiturs']) + ->where('kategori_id', $id) + ->paginate(5); + $kategoris = Kategori::all(); + $fiturs = Fitur::with('kategoriFitur')->get(); + $kategoriFiturs = KategoriFitur::with('fiturs')->get(); + $fitursTanpaKategori = Fitur::whereNull('kategori_fitur_id')->get(); // <-- tambahkan ini + + return view('admin.templates.index', compact( + 'templates', + 'kategoris', + 'fiturs', + 'kategori', + 'kategoriFiturs', + 'fitursTanpaKategori' // <-- kirim ke view + )); +} - return view('admin.templates.index', compact('templates', 'kategoris', 'fiturs', 'kategori')); - } } diff --git a/backend/app/Models/Fitur.php b/backend/app/Models/Fitur.php index ce7ca76..30aad3a 100644 --- a/backend/app/Models/Fitur.php +++ b/backend/app/Models/Fitur.php @@ -18,9 +18,9 @@ class Fitur extends Model ]; - public function kategoriFitur() - { - return $this->belongsTo(KategoriFitur::class, 'kategori_fitur_id'); - } + public function kategoriFitur() +{ + return $this->belongsTo(KategoriFitur::class, 'kategori_fitur_id'); +} } diff --git a/backend/app/Models/KategoriFitur.php b/backend/app/Models/KategoriFitur.php index b66d7b6..7d1f7ae 100644 --- a/backend/app/Models/KategoriFitur.php +++ b/backend/app/Models/KategoriFitur.php @@ -14,4 +14,10 @@ class KategoriFitur extends Model protected $fillable = [ 'deskripsi', ]; + + // relasi: satu kategori punya banyak fitur + public function fiturs() + { + return $this->hasMany(Fitur::class, 'kategori_fitur_id'); + } } diff --git a/backend/resources/views/admin/fitur/index.blade.php b/backend/resources/views/admin/fitur/index.blade.php index 10a6180..4dff712 100644 --- a/backend/resources/views/admin/fitur/index.blade.php +++ b/backend/resources/views/admin/fitur/index.blade.php @@ -157,30 +157,43 @@
Tambah Fitur
- -
- - -
- + + {{-- Kategori --}} + @if($kategori_fitur ?? false) + + +

+ Kategori: {{ optional($kategori_fitur ?? null)->deskripsi }} +

+ @else + +
+ + +
+ @endif + + {{-- Nama Fitur --}}
- + + {{-- Harga --}}
+
+ class="bg-gray-300 text-black px-3 py-1 rounded">Batal
@@ -199,35 +212,48 @@
Edit Fitur
- -
- - -
- + + {{-- Kategori --}} + @if($kategori_fitur ?? false) + + +

+ Kategori: {{ optional($kategori_fitur ?? null)->deskripsi }} +

+ @else + +
+ + +
+ @endif + + {{-- Nama Fitur --}}
- + + {{-- Harga --}}
+
+ data-id="{{ $item->id }}">Batal
@@ -236,6 +262,7 @@ @endforeach + @foreach ($fitur as $item)