This commit is contained in:
HANIF FEBRIANSYAH 2024-09-11 00:42:41 +07:00
parent b8ce40b6dd
commit db82554138
14 changed files with 494 additions and 194 deletions

View File

@ -3,11 +3,25 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\DataKursus; // Pastikan model diimport
class AdminDashboardController extends Controller class AdminDashboardController extends Controller
{ {
public function index() public function index()
{ {
return view('admin.dahsboard'); // Ambil semua data kursus
$allLandingPages = DataKursus::all();
// Ambil satu gambar secara acak untuk bagian atas
$randomLandingPage = $allLandingPages->random();
// Ambil maksimal 6 gambar secara acak untuk bagian bawah
$randomLandingPages = $allLandingPages->random(min(count($allLandingPages), 6));
return view('admin.dahsboard', [
'randomLandingPage' => $randomLandingPage,
'randomLandingPages' => $randomLandingPages,
'allLandingPages' => $allLandingPages
]);
} }
} }

View File

@ -7,6 +7,8 @@
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Nette\Utils\Strings;
use PhpParser\Node\Expr\Cast\String_;
use PhpParser\Node\Stmt\TryCatch; use PhpParser\Node\Stmt\TryCatch;
class AdminDataKursusController extends Controller class AdminDataKursusController extends Controller
@ -27,6 +29,7 @@ public function create()
public function store(Request $request) public function store(Request $request)
{ {
try { try {
// Perbarui aturan validasi
$validator = Validator::make($request->all(), [ $validator = Validator::make($request->all(), [
'nama_kursus' => 'required', 'nama_kursus' => 'required',
'img' => 'required|file|mimes:jpeg,png,jpg|max:2048', 'img' => 'required|file|mimes:jpeg,png,jpg|max:2048',
@ -35,16 +38,21 @@ public function store(Request $request)
'metode' => 'required', 'metode' => 'required',
'fasilitas' => 'required', 'fasilitas' => 'required',
'lokasi' => 'required', 'lokasi' => 'required',
'latitude' => 'required|numeric|between:-180,180', 'latitude' => 'nullable', // Ubah aturan validasi
'longitude' => 'required|numeric|between:-180,180', 'longitude' => 'nullable', // Ubah aturan validasi
'img_konten.*' => 'file|mimes:jpeg,png,jpg|max:2048', 'img_konten.*' => 'file|mimes:jpeg,png,jpg|max:2048',
]); ]);
// if ($validator->fails()) { // Cek apakah validasi gagal
// return redirect()->back()->withInput()->withErrors($validator); if ($validator->fails()) {
// } return redirect()->back()->withErrors($validator)->withInput();
}
// Menyimpan file gambar utama
$imgPath = $request->file('img')->store('konten', 'public'); $imgPath = $request->file('img')->store('konten', 'public');
$imgKontenPaths = []; $imgKontenPaths = [];
// Menyimpan file gambar konten
if ($request->hasFile('img_konten')) { if ($request->hasFile('img_konten')) {
foreach ($request->file('img_konten') as $file) { foreach ($request->file('img_konten') as $file) {
$imgKontenPaths[] = $file->store('logo', 'public'); $imgKontenPaths[] = $file->store('logo', 'public');
@ -60,28 +68,87 @@ public function store(Request $request)
'metode' => $request->metode, 'metode' => $request->metode,
'fasilitas' => $request->fasilitas, 'fasilitas' => $request->fasilitas,
'lokasi' => $request->lokasi, 'lokasi' => $request->lokasi,
'latitude' => $request->latitude, 'latitude' => $request->latitude, // Menyimpan nilai latitude bebas
'longitude' => $request->longitude, 'longitude' => $request->longitude, // Menyimpan nilai longitude bebas
'img_konten' => json_encode($imgKontenPaths), 'img_konten' => json_encode($imgKontenPaths),
]); ]);
return redirect('/admin/data-kursus'); // Redirect setelah berhasil
return redirect('/admin/data-kursus')->with('success', 'Data berhasil disimpan.');
} catch (\Exception $e) { } catch (\Exception $e) {
dd($e->getMessage()); // Tangani kesalahan
return redirect()->back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
} }
} }
public function edit()
public function edit($id)
{ {
return view('admin.ubahDataKursusAdmin'); // Ambil record DataKursus berdasarkan ID-nya
$dataKursus = DataKursus::findOrFail($id);
// Decode field JSON untuk nama gambar jika ada
$imageName = $dataKursus->img_konten ? json_decode($dataKursus->img_konten, true) : [];
// Kirim data ke view
return view('admin.ubahDataKursusAdmin', compact('dataKursus', 'imageName'));
} }
public function destroy(string $id) public function update(Request $request, $id)
{ {
$data = DataKursus::find($id); // Validasi request
if ($data) { $request->validate([
$data->delete(); 'nama_kursus' => 'required|string|max:255',
'deskripsi' => 'required|string',
'img' => 'nullable|image|max:2048',
'img_konten.*' => 'nullable|image|max:2048',
'latitude' => 'required|numeric',
'longitude' => 'nullable|numeric',
'paket' => 'nullable|string',
'metode' => 'nullable|string',
'fasilitas' => 'nullable|string',
'lokasi' => 'nullable|string',
]);
// Ambil record DataKursus berdasarkan ID-nya
$dataKursus = DataKursus::findOrFail($id);
// Update fields
$dataKursus->nama_kursus = $request->input('nama_kursus');
$dataKursus->deskripsi = $request->input('deskripsi');
$dataKursus->latitude = $request->input('latitude');
$dataKursus->longitude = $request->input('longitude');
$dataKursus->paket = $request->input('paket');
$dataKursus->metode = $request->input('metode');
$dataKursus->fasilitas = $request->input('fasilitas');
$dataKursus->lokasi = $request->input('lokasi');
// Handle single image upload
if ($request->hasFile('img')) {
$dataKursus->img = $request->file('img')->store('images', 'public');
} }
// Handle multiple image uploads
if ($request->hasFile('img_konten')) {
$images = [];
foreach ($request->file('img_konten') as $file) {
$images[] = $file->store('images', 'public');
}
$dataKursus->img_konten = json_encode($images);
}
// Save updated record
$dataKursus->save();
// Redirect with success message
return redirect()->route('admin.dataKursus')->with('success', 'Data berhasil diperbarui.');
}
public function destroy($id)
{
$dataKursus = DataKursus::findOrFail($id);
$dataKursus->delete();
return redirect()->route('admin.dataKursus')->with('success', 'Data berhasil dihapus.'); return redirect()->route('admin.dataKursus')->with('success', 'Data berhasil dihapus.');
} }
} }

View File

@ -20,8 +20,8 @@ public function up()
$table->longText('metode'); $table->longText('metode');
$table->text('fasilitas'); $table->text('fasilitas');
$table->longText('lokasi'); $table->longText('lokasi');
$table->decimal('latitude', 10, 7); $table->string('latitude');
$table->decimal('longitude', 10, 7); $table->string('longitude');
$table->json('img_konten')->nullable(); $table->json('img_konten')->nullable();
$table->timestamps(); $table->timestamps();
}); });

View File

@ -1,26 +1,38 @@
<x-adminlayout> <x-adminlayout>
<div class="w-full pb-4"> <div class="w-full pt-8 pb-8 px-6">
<div class=" flex flex-col rounded-2xl overflow-hidden"> <div class="flex flex-col rounded-2xl overflow-hidden bg-white shadow-lg">
<div> <!-- Bagian atas menampilkan satu gambar secara acak -->
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover w-full h-full" alt=""> <div class="relative">
@if ($randomLandingPage->img)
<div class="relative group">
<img src="{{ asset('storage/' . $randomLandingPage->img) }}"
class="object-cover w-full max-h-[600px] rounded-t-2xl" alt="Gambar">
<div
class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity">
<p class="text-white text-lg font-semibold">{{ $randomLandingPage->nama_kursus }}</p>
</div> </div>
<div class="rounded-2xl overflow-hidden px-32">
<div class="justify-center items-center m-auto grid grid-cols-5 ">
<div>
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
</div> </div>
<div> @else
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt=""> <div class="flex items-center justify-center h-[600px] bg-gray-200 rounded-t-2xl">
<p class="text-gray-600">Tidak ada gambar yang tersedia.</p>
</div> </div>
<div> @endif
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
</div> </div>
<div>
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt=""> <!-- Bagian bawah menampilkan maksimal 6 gambar secara acak -->
<div class="p-4">
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4">
@foreach ($randomLandingPages as $page)
<div
class="relative group rounded-lg overflow-hidden shadow-md transition-transform transform hover:scale-105">
<img src="{{ asset('storage/' . $page->img) }}" class="object-cover w-full h-full"
alt="">
<div
class="absolute inset-0 bg-black bg-opacity-30 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity">
<p class="text-white text-lg font-semibold">{{ $page->nama_kursus }}</p>
</div> </div>
<div>
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
</div> </div>
@endforeach
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,12 +3,14 @@
<div class="container"> <div class="container">
<div class="py-10"> <div class="py-10">
<div class="relative overflow-x-auto shadow-md sm:rounded-lg"> <div class="relative overflow-x-auto sm:rounded-lg">
<div class="flex justify-end items-center pb-4 "> <div class="flex justify-end items-center pb-4 ">
<a class="bg-[#4F7F81] py-2 px-4 rounded-xl text-white font-bold" href="{{ route ('admin.create') }}">Tambah Data</a> <a class="bg-[#4F7F81] py-2 px-4 rounded-xl shadow-md shadow-black text-white font-bold"
href="{{ route('admin.create') }}">Tambah Data</a>
</div> </div>
<table class="w-full text-sm text-left rtl:text-right text-gray-500">
<thead class="text-xs text-gray-700 uppercase bg-gray-50"> <table class="w-full text-sm text-left rtl:text-right shadow-md shadow-black text-gray-500">
<thead class="text-xs text-gray-700 uppercase shadow-md shadow-black bg-gray-50">
<tr> <tr>
<th scope="col" class="px-6 py-3">No</th> <th scope="col" class="px-6 py-3">No</th>
<th scope="col" class="px-6 py-3">Nama Kursus</th> <th scope="col" class="px-6 py-3">Nama Kursus</th>
@ -17,9 +19,9 @@
<th scope="col" class="px-6 py-3">Aksi</th> <th scope="col" class="px-6 py-3">Aksi</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody class="shadow-md shadow-black">
@foreach ($courses as $index => $course) @foreach ($courses as $index => $course)
<tr class="odd:bg-white even:bg-gray-50"> <tr class="odd:bg-white even:bg-gray-50 shadow-md shadow-black">
<th scope="row" class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap"> <th scope="row" class="px-6 py-4 font-medium text-gray-900 whitespace-nowrap">
{{ $index + 1 }} {{ $index + 1 }}
</th> </th>
@ -34,30 +36,124 @@
alt=""> alt="">
</td> </td>
<td class="px-6 py-4 flex space-x-2"> <td class="px-6 py-4 flex space-x-2">
<a href="#" <a href="/admin/{{ $course->id }}/edit-kursus"
class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl"> class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl">
Edit Edit
</a> </a>
<!-- Hapus Link --> <!-- Tombol DELETE -->
<a href="#" <button data-modal-target="popup-modal-{{ $course->id }}"
onclick="event.preventDefault(); if(confirm('Apakah Anda yakin ingin menghapus?')) document.getElementById('delete-form-{{ $course->id }}').submit();" data-modal-toggle="popup-modal-{{ $course->id }}"
class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl"> class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl"
type="button">
Hapus Hapus
</a> </button>
<!-- Modal Konfirmasi -->
<div id="popup-modal-{{ $course->id }}" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-md max-h-full">
<div class="relative bg-white rounded-lg shadow ">
<button type="button"
class="absolute top-3 end-2.5 text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center "
data-modal-hide="popup-modal-{{ $course->id }}">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" />
</svg>
<span class="sr-only">Close modal</span>
</button>
<div class="p-4 md:p-5 text-center">
<svg class="text-[#4F7F81] mx-auto mb-4 w-12 h-12 "
aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="M10 11V6m0 8h.01M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
</svg>
<h3 class="text-black mb-5 text-lg font-normal ">
Apakah Anda yakin ingin menghapus kursus ini?</h3>
<!-- Form Hapus -->
<form id="delete-form-{{ $course->id }}" <form id="delete-form-{{ $course->id }}"
action="{{ route('delete', ['id' => $course->id]) }}" method="POST" action="{{ route('delete', ['id' => $course->id]) }}"
style="display: none;"> method="POST" style="display: none;">
@csrf @csrf
@method('DELETE') @method('DELETE')
</form> </form>
<button type="button"
onclick="document.getElementById('delete-form-{{ $course->id }}').submit()"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center">
Hapus
</button>
<button type="button"
class="py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-gray-800 focus:z-10 focus:ring-4 focus:ring-gray-100 "
data-modal-hide="popup-modal-{{ $course->id }}">Tidak,
Batal</button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('[data-modal-toggle]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-target');
document.getElementById(targetId).classList.remove('hidden');
});
});
document.querySelectorAll('[data-modal-hide]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-hide');
document.getElementById(targetId).classList.add('hidden');
});
});
});
</script>
</td> </td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>
</table> </table>
</div> </div>
</div>
</div>
@if (session('success'))
<div id="notification"
class="fixed top-4 left-1/2 transform -translate-x-1/2 bg-green-50 text-green-800 border border-green-300 rounded-lg p-4 z-20">
<div class="flex items-center">
<svg class="flex-shrink-0 w-4 h-4 me-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="currentColor" viewBox="0 0 20 20">
<path
d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z" />
</svg>
<span class="font-medium">{{ session('success') }}</span>
</div> </div>
</div> </div>
@endif
<script>
document.addEventListener('DOMContentLoaded', function() {
const notification = document.getElementById('notification');
if (notification) {
setTimeout(() => {
notification.classList.add('hidden');
}, 5000); // 5000 milliseconds = 5 seconds
}
});
</script>
</x-adminlayout> </x-adminlayout>

View File

@ -12,12 +12,13 @@
d="M13 5H1m0 0 4 4M1 5l4-4" /> d="M13 5H1m0 0 4 4M1 5l4-4" />
</svg></a> </svg></a>
</div> </div>
<form action="{{ route('kursus.store') }}" method="POST" enctype="multipart/form-data"> <form id="my-form" action="{{ route('kursus.store') }}" method="POST" enctype="multipart/form-data">
@csrf @csrf
<div class="grid gap-6 mb-6 md:grid-cols-2"> <div class="grid gap-6 mb-6 md:grid-cols-2">
<!-- Nama Kursus --> <!-- Nama Kursus -->
<div> <div>
<label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama Kursus</label> <label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama
Kursus</label>
<input type="text" id="nama_kursus" name="nama_kursus" <input type="text" id="nama_kursus" name="nama_kursus"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Kampung Inggris LC - Language Center" required /> placeholder="Kampung Inggris LC - Language Center" required />
@ -41,7 +42,8 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
<!-- Multiple File Upload --> <!-- Multiple File Upload -->
<div> <div>
<label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple Files</label> <label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple
Files</label>
<input <input
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50"
id="multiple_files" type="file" name="img_konten[]" multiple> id="multiple_files" type="file" name="img_konten[]" multiple>
@ -50,19 +52,31 @@ class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg curs
<!-- Latitude --> <!-- Latitude -->
<div> <div>
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label> <label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label>
<input type="text" id="latitude" name="latitude" <input type="text" id="latitude" name="latitude" pattern="-?\d*\.?\d+"
title="Latitude can include numbers, a dot (.) for decimal, and a minus (-) for negative values."
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Latitude" required /> placeholder="Latitude" required />
</div> </div>
<!-- Longitude --> <!-- Longitude -->
<div> <div>
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">longitude</label> <label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">Longitude</label>
<input type="text" id="longitude" name="longitude" <input type="text" id="longitude" name="longitude" pattern="-?\d*\.?\d+"
title="Longitude can include numbers, a dot (.) for decimal, and a minus (-) for negative values."
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="longitude"/> placeholder="Longitude" />
</div> </div>
@if ($errors->any())
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4"
role="alert">
<strong class="font-bold">Error:</strong>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<!-- Paket --> <!-- Paket -->
<div> <div>
@ -100,8 +114,70 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
placeholder="Write your thoughts here..."></trix-editor> placeholder="Write your thoughts here..."></trix-editor>
</div> </div>
</div> </div>
<button type="submit" <button type="button" data-modal-target="popup-modal" data-modal-toggle="popup-modal"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">Submit</button> class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">
Submit
</button>
<!-- Modal Konfirmasi -->
<div id="popup-modal" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-md max-h-full">
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<button type="button"
class="absolute top-3 end-2.5 text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white"
data-modal-hide="popup-modal">
<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" />
</svg>
<span class="sr-only">Close modal</span>
</button>
<div class="p-4 md:p-5 text-center">
<svg class="mx-auto mb-4 text-gray-400 w-12 h-12 dark:text-gray-200"
aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M10 11V6m0 8h.01M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
</svg>
<h3 class="mb-5 text-lg font-normal text-gray-500 dark:text-gray-400">
Apakah Anda yakin ingin mengirimkan formulir ini?</h3>
<button id="confirm-submit"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center">
Ya, Kirim
</button>
<button type="button"
class="py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
data-modal-hide="popup-modal">Tidak, Batal</button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
// Show modal
document.querySelectorAll('[data-modal-toggle]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-target');
document.getElementById(targetId).classList.remove('hidden');
});
});
// Hide modal
document.querySelectorAll('[data-modal-hide]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-hide');
document.getElementById(targetId).classList.add('hidden');
});
});
// Handle form submission
document.getElementById('confirm-submit').addEventListener('click', () => {
document.getElementById('my-form').submit();
});
});
</script>
</form> </form>

View File

@ -1,25 +1,27 @@
<x-adminlayout> <x-adminlayout>
<div class="container"> <div class="container">
<div class="py-10"> <div class="py-10">
<div class="pb-4 flex"> <div class="pb-4 flex">
<a class="px-4 flex text-white text-lg justify-center items-center py-2 rounded-xl bg-[#4F7F81]" <a class="px-4 flex text-white text-lg justify-center items-center py-2 rounded-xl bg-[#4F7F81]"
href="{{ route('admin.dataKursus') }}"><svg class="w-5 h-5 text-white " aria-hidden="true" href="{{ route('admin.dataKursus') }}">
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10"> <svg class="w-5 h-5 text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 5H1m0 0 4 4M1 5l4-4" /> d="M13 5H1m0 0 4 4M1 5l4-4" />
</svg></a> </svg>
</a>
</div> </div>
<form action="{{ route('kursus.store') }}" method="POST" enctype="multipart/form-data"> <form action="{{ route('admin.update', $dataKursus->id) }}" method="POST" enctype="multipart/form-data">
@csrf @csrf
@method('PUT') <!-- Add this if you are updating an existing resource -->
<div class="grid gap-6 mb-6 md:grid-cols-2"> <div class="grid gap-6 mb-6 md:grid-cols-2">
<!-- Nama Kursus --> <!-- Nama Kursus -->
<div> <div>
<label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama <label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama
Kursus</label> Kursus</label>
<input type="text" id="nama_kursus" name="nama_kursus" <input type="text" id="nama_kursus"
value="{{ old('nama_kursus', $dataKursus->nama_kursus) }}" name="nama_kursus"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Kampung Inggris LC - Language Center" required /> placeholder="Kampung Inggris LC - Language Center" required />
</div> </div>
@ -27,36 +29,40 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
<!-- File Upload --> <!-- File Upload -->
<div> <div>
<label for="file_input" class="block mb-2 text-sm font-medium text-gray-900">Upload File</label> <label for="file_input" class="block mb-2 text-sm font-medium text-gray-900">Upload File</label>
<div class="flex"> <div class="flex items-center">
<input <input
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50"
id="file_input" type="file" name="img"> id="file_input" type="file" name="img">
<div class="ml-2 p-0"> <div class="ml-2">
<!-- Modal toggle --> <!-- Modal toggle -->
<button data-modal-target="default-modal" data-modal-toggle="default-modal" <button data-modal-target="file-upload-modal" data-modal-toggle="file-upload-modal"
class="block text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm py-3 text-center " class="block w-20 text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm py-3 text-center"
type="button"> type="button">
detail Detail
</button> </button>
<!-- Main modal --> <!-- File Upload Modal -->
<div id="default-modal" tabindex="-1" aria-hidden="true" <div id="file-upload-modal" tabindex="-1" aria-hidden="true"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full"> class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-2xl max-h-full"> <div
<!-- Modal content --> class="relative w-full max-w-2xl max-h-full bg-white rounded-lg shadow-lg py-10 px-10 justify-center items-center">
@if ($dataKursus->img)
<img src="{{ asset('storage/' . $dataKursus->img) }}" class="object-cover "
alt="Gambar">
@else
<p>Tidak ada gambar yang tersedia.</p>
@endif
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Deskripsi --> <!-- Deskripsi -->
<div> <div>
<label for="deskripsi" class="block mb-2 text-sm font-medium text-gray-900">Deskripsi</label> <label for="deskripsi" class="block mb-2 text-sm font-medium text-gray-900">Deskripsi</label>
<input type="text" id="deskripsi" name="deskripsi" <input type="text" id="deskripsi" value="{{ old('deskripsi', $dataKursus->deskripsi) }}"
name="deskripsi"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="KAMPUNG INGGRIS LC LANGUAGE CENTER Adalah . . . ." required /> placeholder="KAMPUNG INGGRIS LC LANGUAGE CENTER Adalah . . . ." required />
</div> </div>
@ -65,32 +71,60 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
<div> <div>
<label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple <label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple
Files</label> Files</label>
<div class="flex items-center">
<input <input
class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50" class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50"
id="multiple_files" type="file" name="img_konten[]" multiple> id="multiple_files" type="file" name="img_konten[]" multiple>
<div class="ml-2">
<!-- Modal toggle -->
<button data-modal-target="multiple-files-modal"
data-modal-toggle="multiple-files-modal"
class="block w-20 text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm py-3 text-center"
type="button">
Detail
</button>
<!-- Multiple Files Modal -->
<div id="multiple-files-modal" tabindex="-1" aria-hidden="true"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative overflow-x-auto p-10 w-full max-w-2xl max-h-full bg-white rounded-lg shadow-lg">
@if (!empty($dataKursus->img_konten))
@foreach (json_decode($dataKursus->img_konten, true) as $image)
<img src="{{ asset('storage/' . $image) }}" class="object-cover m-auto"
alt="Gambar">
@endforeach
@else
<p>Tidak ada gambar yang tersedia.</p>
@endif
</div>
</div>
</div>
</div>
</div> </div>
<!-- Latitude --> <!-- Latitude -->
<div> <div>
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label> <label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label>
<input type="text" id="latitude" name="latitude" <input type="text" id="latitude" value="{{ old('latitude', $dataKursus->latitude) }}"
name="latitude"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Latitude" required /> placeholder="Latitude" required />
</div> </div>
<!-- Longitude --> <!-- Longitude -->
<div> <div>
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">longitude</label> <label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">Longitude</label>
<input type="text" id="longitude" name="longitude" <input type="text" id="longitude" value="{{ old('longitude', $dataKursus->longitude) }}"
name="longitude"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="longitude" /> placeholder="Longitude" />
</div> </div>
<!-- Paket --> <!-- Paket -->
<div> <div>
<label for="paket" class="block mb-2 text-sm font-medium text-gray-900">Paket</label> <label for="paket" class="block mb-2 text-sm font-medium text-gray-900">Paket</label>
<input id="paket" name="paket" type="hidden" /> <input id="paket" name="paket" type="hidden"
value="{{ old('paket', $dataKursus->paket) }}" />
<trix-editor input="paket" <trix-editor input="paket"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500" class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor> placeholder="Write your thoughts here..."></trix-editor>
@ -99,7 +133,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
<!-- Metode --> <!-- Metode -->
<div> <div>
<label for="metode" class="block mb-2 text-sm font-medium text-gray-900">Metode</label> <label for="metode" class="block mb-2 text-sm font-medium text-gray-900">Metode</label>
<input id="metode" name="metode" type="hidden" /> <input id="metode" name="metode" type="hidden"
value="{{ old('metode', $dataKursus->metode) }}" />
<trix-editor input="metode" <trix-editor input="metode"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500" class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor> placeholder="Write your thoughts here..."></trix-editor>
@ -108,7 +143,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
<!-- Fasilitas --> <!-- Fasilitas -->
<div> <div>
<label for="fasilitas" class="block mb-2 text-sm font-medium text-gray-900">Fasilitas</label> <label for="fasilitas" class="block mb-2 text-sm font-medium text-gray-900">Fasilitas</label>
<input id="fasilitas" name="fasilitas" type="hidden" /> <input id="fasilitas" name="fasilitas" type="hidden"
value="{{ old('fasilitas', $dataKursus->fasilitas) }}" />
<trix-editor input="fasilitas" <trix-editor input="fasilitas"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500" class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor> placeholder="Write your thoughts here..."></trix-editor>
@ -117,7 +153,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
<!-- Lokasi --> <!-- Lokasi -->
<div> <div>
<label for="lokasi" class="block mb-2 text-sm font-medium text-gray-900">Lokasi</label> <label for="lokasi" class="block mb-2 text-sm font-medium text-gray-900">Lokasi</label>
<input id="lokasi" name="lokasi" type="hidden" /> <input id="lokasi" name="lokasi" type="hidden"
value="{{ old('lokasi', $dataKursus->lokasi) }}" />
<trix-editor input="lokasi" <trix-editor input="lokasi"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500" class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor> placeholder="Write your thoughts here..."></trix-editor>
@ -126,16 +163,11 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
<button type="submit" <button type="submit"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">Submit</button> class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">Submit</button>
</form> </form>
</div> </div>
</div> </div>
@push('script') @push('script')
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.js"></script>
@endpush @endpush
</x-adminlayout> </x-adminlayout>

View File

@ -17,25 +17,28 @@ class="self-center pt-6 text-4xl text-white font-semibold whitespace-nowrap aclo
<div> <div>
<h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Resources <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Resources
</h2> </h2>
<ul class="text-gray-600 font-medium"> <ul class="text-gray-600 font-medium space-y-4">
<li class="mb-4"> <li class="">
<a href="https://flowbite.com/" class="hover:underline">Flowbite</a> <a href="/beranda" class="hover:underline">Beranda</a>
</li> </li>
<li> <li>
<a href="https://tailwindcss.com/" class="hover:underline">Tailwind CSS</a> <a href="/kursus" class="hover:underline">Kursus</a>
</li>
<li>
<a href="/peta" class="hover:underline">Peta</a>
</li> </li>
</ul> </ul>
</div> </div>
<div> <div>
<h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Follow us <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Follow us
</h2> </h2>
<ul class="text-gray-600 font-medium"> <ul class="text-gray-600 font-medium space-y-4">
<li class="mb-4"> <li class="">
<a href="https://github.com/themesberg/flowbite" <a href="#"
class="hover:underline ">Github</a> class="hover:underline ">Github</a>
</li> </li>
<li> <li>
<a href="https://discord.gg/4eeurUVvTy" class="hover:underline">Discord</a> <a href="#" class="hover:underline">Discord</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -21,8 +21,8 @@ class="inline-flex text-white items-center p-2 w-10 h-10 justify-center text-sm
class="flex flex-col font-medium mt-4 rounded-lg bg-white md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-transparent"> class="flex flex-col font-medium mt-4 rounded-lg bg-white md:space-x-8 rtl:space-x-reverse md:flex-row md:mt-0 md:border-0 md:bg-transparent">
<li class=""> <li class="">
<a href="{{ route('home') }}" <a href="{{ route('user.home') }}"
class="{{ request()->is('/') ? 'bg-[#EBFEA1] md:bg-transparent md:text-white md:underline' : 'text-gray-900' }} block py-2 px-3 md:p-0 rounded hover:bg-[#EBFEA1] md:hover:bg-transparent md:border-0 md:hover:text-white poppins-extrabold text-sm "> class="{{ request()->is('beranda') ? 'bg-[#EBFEA1] md:bg-transparent md:text-white md:underline' : 'text-gray-900' }} block py-2 px-3 md:p-0 rounded hover:bg-[#EBFEA1] md:hover:bg-transparent md:border-0 md:hover:text-white poppins-extrabold text-sm ">
Beranda Beranda
</a> </a>
</li> </li>

View File

@ -36,7 +36,7 @@ class="{{ request()->is('admin/data-kursus','admin/tambahdata') ? 'bg-[#EBFEA1]
<form method="POST" action="{{ route('logout') }}"> <form method="POST" action="{{ route('logout') }}">
@csrf @csrf
<button type="submit" <button type="submit"
class="{{ request()->is('peta') ? 'bg-[#EBFEA1] md:bg-transparent md:text-white md:underline' : 'text-gray-900' }} block py-2 px-3 md:p-0 rounded hover:bg-[#EBFEA1] text-red-800 md:hover:bg-transparent md:border-0 md:hover:text-white poppins-extrabold text-sm "> class="{{ request()->is('peta') ? 'bg-[#EBFEA1] md:bg-transparent md:text-white md:underline' : 'text-gray-900' }} block py-2 px-3 md:p-0 rounded hover:bg-[#EBFEA1] md:hover:bg-transparent md:border-0 md:hover:text-white poppins-extrabold text-sm ">
Keluar Keluar
</button> </button>
</form> </form>

View File

@ -24,7 +24,7 @@
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 m-auto justify-center items-center"> <div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 m-auto justify-center items-center">
@foreach ($landingpage as $landingpage) @foreach ($landingpage as $landingpage)
<div class="max-w-max bg-white border border-gray-200 rounded-lg shadow "> <div class="transition ease-in-out delay-75 hover:-translate-y-1 hover:scale-105 duration-300 max-w-max bg-white border border-gray-200 rounded-lg shadow ">
<a href="#"> <a href="#">
<img class="rounded-lg m-auto flex justify-center items-center w-full max-h-64 object-cover" <img class="rounded-lg m-auto flex justify-center items-center w-full max-h-64 object-cover"
src="{{ asset('storage/' . $landingpage->img) }}" alt="" /> src="{{ asset('storage/' . $landingpage->img) }}" alt="" />
@ -38,9 +38,6 @@ class="mb-2 text-2xl poppins-regular font-extrabold tracking-tight text-gray-90
<p class="mb-3 font-normal poppins-regular text-gray-700"> <p class="mb-3 font-normal poppins-regular text-gray-700">
{{ Str::words($landingpage->deskripsi, 30, '...') }} {{ Str::words($landingpage->deskripsi, 30, '...') }}
</p> </p>
<div class="flex items-center"> <div class="flex items-center">
<svg class="w-4 h-4 text-yellow-300 me-1" aria-hidden="true" <svg class="w-4 h-4 text-yellow-300 me-1" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 22 20"> xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 22 20">
@ -67,9 +64,6 @@ class="mb-2 text-2xl poppins-regular font-extrabold tracking-tight text-gray-90
<path <path
d="M20.924 7.625a1.523 1.523 0 0 0-1.238-1.044l-5.051-.734-2.259-4.577a1.534 1.534 0 0 0-2.752 0L7.365 5.847l-5.051.734A1.535 1.535 0 0 0 1.463 9.2l3.656 3.563-.863 5.031a1.532 1.532 0 0 0 2.226 1.616L11 17.033l4.518 2.375a1.534 1.534 0 0 0 2.226-1.617l-.863-5.03L20.537 9.2a1.523 1.523 0 0 0 .387-1.575Z" /> d="M20.924 7.625a1.523 1.523 0 0 0-1.238-1.044l-5.051-.734-2.259-4.577a1.534 1.534 0 0 0-2.752 0L7.365 5.847l-5.051.734A1.535 1.535 0 0 0 1.463 9.2l3.656 3.563-.863 5.031a1.532 1.532 0 0 0 2.226 1.616L11 17.033l4.518 2.375a1.534 1.534 0 0 0 2.226-1.617l-.863-5.03L20.537 9.2a1.523 1.523 0 0 0 .387-1.575Z" />
</svg> </svg>
<p class="ms-1 text-sm text-gray-500 ">4.95</p>
<p class="ms-1 text-sm text-gray-500 ">out of</p>
<p class="ms-1 text-sm text-gray-500 ">5</p>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<a href="/kursus/{{ $landingpage->id }}/detail" <a href="/kursus/{{ $landingpage->id }}/detail"
@ -111,27 +105,5 @@ class="inline-flex items-center px-6 font-extrabold py-2 text-sm text-center rin
</div> </div>
</div> </div>
</div> </div>
<div class="container">
<p class="py-4 pl-2">Ulasan</p>
<div class="grid gap-8 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 pb-10">
<div class="rounded-xl border-black border-[1px] p-4 ">
<img src="{{ asset('img/petik.png') }}" alt="">
<p class="">
Peta interaktifnya sangat membantu!
</p>
<p class="">
Salma
</p>
</div>
<div class="rounded-xl border-black border-[1px] p-4 ">
<img src="{{ asset('img/petik.png') }}" alt="">
<p class="">
Peta interaktifnya sangat membantu!
</p>
<p class="">
Salma
</p>
</div>
</div>
</div>
</x-layout> </x-layout>

View File

@ -1,20 +1,19 @@
<x-layout> <x-layout>
<div class="py-10 bg-white "> <div class="py-10 bg-white container">
<div class="bg-[#EBFEA1] poppins-extrabold m-auto flex items-center justify-center p-2"> <div class="bg-[#EBFEA1] poppins-extrabold m-auto flex items-center justify-center p-2">
<p>Halaman ini berisi tentang kursus di Pare! </p> <p>Halaman ini berisi tentang kursus di Pare! </p>
</div> </div>
</div> </div>
<div class="container"> <div class="container">
<div class="flex justify-end py-4"> <div class="flex justify-end py-4">
<div class="flex space-x-2"> <div class="flex space-x-2">
<div class="flex"> <div class="flex">
<div class="relative w-full"> <div class="relative w-full">
<form action="/kursus/search" method="GET">
<input type="search" id="search-dropdown" <input type="search" id="search-dropdown"
class="block pr-12 p-2.5 w-full z-20 text-sm text-gray-900 bg-gray-50 rounded-e-lg focus:ring-blue-500 focus:border-blue-500" class="block pr-12 p-2.5 w-full z-20 text-sm text-gray-900 bg-gray-50 rounded-e-lg focus:ring-blue-500 focus:border-blue-500"
placeholder="Pencarian Nama Kursus" required /> placeholder="Pencarian Nama Kursus"/>
<div type="submit" <div class="absolute top-0 end-0 p-2.5 text-sm font-medium h-full text-white bg-[#4F7F81] rounded-e-lg border border-[#4F7F81]">
class="absolute top-0 end-0 p-2.5 text-sm font-medium h-full text-white bg-[#4F7F81] rounded-e-lg border border-[#4F7F81] hover:bg-[#4F7F81] focus:ring-4 focus:outline-none focus:ring-[#4F7F81]">
<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 20 20"> fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
@ -22,31 +21,29 @@ class="absolute top-0 end-0 p-2.5 text-sm font-medium h-full text-white bg-[#4F7
</svg> </svg>
<span class="sr-only">Search</span> <span class="sr-only">Search</span>
</div> </div>
</form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="pb-20 grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 m-auto justify-center items-center">
<div id="kursus-container" class="pb-20 grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8 m-auto justify-center items-center">
@foreach ($data_kursus as $kursus) @foreach ($data_kursus as $kursus)
<div class="max-w-sm shadow-xl bg-white border border-gray-300 rounded-lg"> <div class="shadow-2xl transition ease-in-out delay-75 hover:-translate-y-1 hover:scale-105 duration-300 bg-white border border-gray-300 rounded-lg kursus-item">
<a href="#"> <a href="#">
<img class="rounded-lg m-auto w-full max-h-64 object-cover" <img class="rounded-lg m-auto w-full max-h-64 object-cover"
src="{{ asset('storage/' . $kursus->img) }}" alt="{{ $kursus->nama_kursus }}" /> src="{{ asset('storage/' . $kursus->img) }}" alt="{{ $kursus->nama_kursus }}" />
</a> </a>
<div class="p-5"> <div class="p-5">
<a href="#"> <a href="#">
<h5 class="mb-2 text-2xl poppins-regular font-extrabold tracking-tight text-gray-900"> <h5 class="mb-2 text-2xl poppins-regular font-extrabold tracking-tight text-gray-900 nama-kursus">
{{ $kursus->nama_kursus }} {{ $kursus->nama_kursus }}
</h5> </h5>
</a> </a>
<p class="mb-3 font-normal poppins-regular text-gray-700"> <p class="mb-3 font-normal poppins-regular text-gray-700">
{{ Str::limit($kursus->deskripsi) }} {{ Str::limit($kursus->deskripsi, 200, '...') }}
</p> </p>
<div class="flex justify-end mt-8">
<div class="flex justify-end">
<a href="/kursus/{{ $kursus->id }}/detail" <a href="/kursus/{{ $kursus->id }}/detail"
class="inline-flex items-center px-6 py-2 text-sm font-extrabold text-black ring-2 ring-black hover:text-white hover:bg-[#4F7F81] hover:ring-[#4F7F81] rounded-full focus:ring-4 focus:outline-none"> class="inline-flex items-center px-6 py-2 text-sm font-extrabold text-black ring-2 ring-black hover:text-white hover:bg-[#4F7F81] hover:ring-[#4F7F81] rounded-full focus:ring-4 focus:outline-none">
Lihat Lihat
@ -62,4 +59,28 @@ class="inline-flex items-center px-6 py-2 text-sm font-extrabold text-black ring
@endforeach @endforeach
</div> </div>
</div> </div>
<script>
// Ambil elemen input dan container kursus
const searchInput = document.getElementById('search-dropdown');
const kursusContainer = document.getElementById('kursus-container');
const kursusItems = document.querySelectorAll('.kursus-item');
// Event listener untuk input pencarian
searchInput.addEventListener('input', function() {
const searchTerm = searchInput.value.toLowerCase();
// Loop melalui setiap item kursus
kursusItems.forEach(function(item) {
const namaKursus = item.querySelector('.nama-kursus').textContent.toLowerCase();
// Cek apakah nama kursus mengandung teks pencarian
if (namaKursus.includes(searchTerm)) {
item.style.display = 'block'; // Tampilkan jika cocok
} else {
item.style.display = 'none'; // Sembunyikan jika tidak cocok
}
});
});
</script>
</x-layout> </x-layout>

View File

@ -11,22 +11,20 @@
// ADMIN // ADMIN
Route::get('/admin/dashboard', [AdminDashboardController::class, 'index'])->name('admin.home'); // SHOW DASHBOARD Route::get('/admin/dashboard', [AdminDashboardController::class, 'index'])->name('admin.home'); // SHOW DASHBOARD
Route::get('/admin/data-kursus', [AdminDataKursusController::class, 'dataKursus'])->name('admin.dataKursus'); //SHOW DATA Route::get('/admin/data-kursus', [AdminDataKursusController::class, 'dataKursus'])->name('admin.dataKursus'); //SHOW DATA
Route::get('/admin/edit-kursus', [AdminDataKursusController::class, 'edit'])->name('admin.edit'); // SHOW TAMPILAN EDIT DATA Route::get('/admin/create-data', [AdminDataKursusController::class, 'create'])->name('admin.create'); // SHOW TAMBAH DATA
Route::post('/admin/store', [AdminDataKursusController::class, 'store'])->name('kursus.store'); // TOMBOL SIMPAN TAMBAH DATA Route::get('/admin/{id}/edit-kursus', [AdminDataKursusController::class, 'edit'])->name('admin.edit'); // SHOW EDIT DATA
Route::get('/admin/createData', [AdminDataKursusController::class, 'create'])->name('admin.create'); // SHOW TAMPILAN TAMBAH DATA
// FUNGSI DI ADMIN
Route::put('/admin/update/{id}', [AdminDataKursusController::class, 'update'])->name('admin.update'); // TOMBOL EDIT DATA
Route::post('/admin/store', [AdminDataKursusController::class, 'store'])->name('kursus.store'); // TOMBOL TAMBAH DATA
Route::delete('/admin/delete/{id}', [AdminDataKursusController::class, 'destroy'])->name('delete'); // TOMBOL DELETE DATA Route::delete('/admin/delete/{id}', [AdminDataKursusController::class, 'destroy'])->name('delete'); // TOMBOL DELETE DATA
// Route::update('/admin/update/{id}', [AdminDataKursusController::class, 'update'])->name('update');
Route::get('/admin/courses', [AdminDataKursusController::class, 'index']);
// LOGIN // LOGIN
Route::get('/login', [LoginController::class, 'index'])->name('login'); Route::get('/login', [LoginController::class, 'index'])->name('login'); // SHOW LOGIN
// USER // USER
Route::get('/', [PengunjungController::class, 'home'])->name('home'); // SHOW TAMPILAN AWAL Route::get('/beranda', [PengunjungController::class, 'home'])->name('user.home'); // SHOW TAMPILAN AWAL
Route::get('/kursus', [PengunjungController::class, 'kursus'])->name('user.kursus'); //SHOW TAMPILAN SELURUH KHURSUS Route::get('/kursus', [PengunjungController::class, 'kursus'])->name('user.kursus'); //SHOW TAMPILAN SELURUH KHURSUS
Route::get('/kursus/search', [PengunjungController::class, 'search'])->name('user.kursus.search'); //SHOW TAMPILAN SELURUH KHURSUS
Route::get('/peta', [PengunjungController::class, 'maps'])->name('user.peta'); //SHOW PETA SELURUH TITIK KURSUS Route::get('/peta', [PengunjungController::class, 'maps'])->name('user.peta'); //SHOW PETA SELURUH TITIK KURSUS
Route::get('/kursus/rute', [PengunjungController::class, 'rute'])->name('user.rute'); //SHOW PETA SELURUH TITIK KURSUS Route::get('/kursus/rute', [PengunjungController::class, 'rute'])->name('user.rute'); //SHOW PETA SELURUH TITIK KURSUS
Route::get('/kursus/{id}/detail', [PengunjungController::class, 'detail'])->name('kursus.detail'); // DETAIL KHURSUS MASING" Route::get('/kursus/{id}/detail', [PengunjungController::class, 'detail'])->name('kursus.detail'); // DETAIL KHURSUS MASING"

View File

@ -16,6 +16,15 @@ export default {
}, },
// Tambahkan opsi `center` untuk margin auto // Tambahkan opsi `center` untuk margin auto
center: true, center: true,
dropShadow: {
"1xl": "0 10px 20px rgba(0, 0, 0, 0.15)", // Light shadow for minimal depth
"2xl": "0 20px 30px rgba(0, 0, 0, 0.2)", // More noticeable shadow
"3xl": "0 30px 40px rgba(0, 0, 0, 0.25)", // Deep shadow for significant depth
"4xl": [
"0 30px 50px rgba(0, 0, 0, 0.3)", // Stronger shadow with more blur
"0 40px 70px rgba(0, 0, 0, 0.2)", // Additional shadow for greater depth
],
},
}, },
extend: {}, extend: {},
}, },