95%
This commit is contained in:
parent
b8ce40b6dd
commit
db82554138
|
@ -3,11 +3,25 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\DataKursus; // Pastikan model diimport
|
||||
|
||||
class AdminDashboardController extends Controller
|
||||
{
|
||||
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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Nette\Utils\Strings;
|
||||
use PhpParser\Node\Expr\Cast\String_;
|
||||
use PhpParser\Node\Stmt\TryCatch;
|
||||
|
||||
class AdminDataKursusController extends Controller
|
||||
|
@ -27,6 +29,7 @@ public function create()
|
|||
public function store(Request $request)
|
||||
{
|
||||
try {
|
||||
// Perbarui aturan validasi
|
||||
$validator = Validator::make($request->all(), [
|
||||
'nama_kursus' => 'required',
|
||||
'img' => 'required|file|mimes:jpeg,png,jpg|max:2048',
|
||||
|
@ -35,16 +38,21 @@ public function store(Request $request)
|
|||
'metode' => 'required',
|
||||
'fasilitas' => 'required',
|
||||
'lokasi' => 'required',
|
||||
'latitude' => 'required|numeric|between:-180,180',
|
||||
'longitude' => 'required|numeric|between:-180,180',
|
||||
'latitude' => 'nullable', // Ubah aturan validasi
|
||||
'longitude' => 'nullable', // Ubah aturan validasi
|
||||
'img_konten.*' => 'file|mimes:jpeg,png,jpg|max:2048',
|
||||
]);
|
||||
|
||||
// if ($validator->fails()) {
|
||||
// return redirect()->back()->withInput()->withErrors($validator);
|
||||
// }
|
||||
// Cek apakah validasi gagal
|
||||
if ($validator->fails()) {
|
||||
return redirect()->back()->withErrors($validator)->withInput();
|
||||
}
|
||||
|
||||
// Menyimpan file gambar utama
|
||||
$imgPath = $request->file('img')->store('konten', 'public');
|
||||
$imgKontenPaths = [];
|
||||
|
||||
// Menyimpan file gambar konten
|
||||
if ($request->hasFile('img_konten')) {
|
||||
foreach ($request->file('img_konten') as $file) {
|
||||
$imgKontenPaths[] = $file->store('logo', 'public');
|
||||
|
@ -60,28 +68,87 @@ public function store(Request $request)
|
|||
'metode' => $request->metode,
|
||||
'fasilitas' => $request->fasilitas,
|
||||
'lokasi' => $request->lokasi,
|
||||
'latitude' => $request->latitude,
|
||||
'longitude' => $request->longitude,
|
||||
'latitude' => $request->latitude, // Menyimpan nilai latitude bebas
|
||||
'longitude' => $request->longitude, // Menyimpan nilai longitude bebas
|
||||
'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) {
|
||||
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);
|
||||
if ($data) {
|
||||
$data->delete();
|
||||
// Validasi request
|
||||
$request->validate([
|
||||
'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.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ public function up()
|
|||
$table->longText('metode');
|
||||
$table->text('fasilitas');
|
||||
$table->longText('lokasi');
|
||||
$table->decimal('latitude', 10, 7);
|
||||
$table->decimal('longitude', 10, 7);
|
||||
$table->string('latitude');
|
||||
$table->string('longitude');
|
||||
$table->json('img_konten')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
|
|
@ -1,26 +1,38 @@
|
|||
<x-adminlayout>
|
||||
<div class="w-full pb-4">
|
||||
<div class=" flex flex-col rounded-2xl overflow-hidden">
|
||||
<div>
|
||||
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover w-full h-full" alt="">
|
||||
<div class="w-full pt-8 pb-8 px-6">
|
||||
<div class="flex flex-col rounded-2xl overflow-hidden bg-white shadow-lg">
|
||||
<!-- Bagian atas menampilkan satu gambar secara acak -->
|
||||
<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 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>
|
||||
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
|
||||
@else
|
||||
<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>
|
||||
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
|
||||
@endif
|
||||
</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>
|
||||
<img src="{{ asset('img/Rectangle 227.png') }}" class="object-cover h-auto w-" alt="">
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,12 +3,14 @@
|
|||
<div class="container">
|
||||
<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 ">
|
||||
<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>
|
||||
<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>
|
||||
<th scope="col" class="px-6 py-3">No</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>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tbody class="shadow-md shadow-black">
|
||||
@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">
|
||||
{{ $index + 1 }}
|
||||
</th>
|
||||
|
@ -34,30 +36,124 @@
|
|||
alt="">
|
||||
</td>
|
||||
<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">
|
||||
Edit
|
||||
</a>
|
||||
<!-- Hapus Link -->
|
||||
<a href="#"
|
||||
onclick="event.preventDefault(); if(confirm('Apakah Anda yakin ingin menghapus?')) document.getElementById('delete-form-{{ $course->id }}').submit();"
|
||||
class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl">
|
||||
<!-- Tombol DELETE -->
|
||||
<button data-modal-target="popup-modal-{{ $course->id }}"
|
||||
data-modal-toggle="popup-modal-{{ $course->id }}"
|
||||
class="font-medium text-white hover:underline py-2 px-4 bg-[#4F7F81] rounded-xl"
|
||||
type="button">
|
||||
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 }}"
|
||||
action="{{ route('delete', ['id' => $course->id]) }}" method="POST"
|
||||
style="display: none;">
|
||||
action="{{ route('delete', ['id' => $course->id]) }}"
|
||||
method="POST" style="display: none;">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
</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>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</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>
|
||||
@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>
|
||||
|
|
|
@ -12,12 +12,13 @@
|
|||
d="M13 5H1m0 0 4 4M1 5l4-4" />
|
||||
</svg></a>
|
||||
</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
|
||||
<div class="grid gap-6 mb-6 md:grid-cols-2">
|
||||
<!-- Nama Kursus -->
|
||||
<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"
|
||||
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 />
|
||||
|
@ -41,7 +42,8 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
|
|||
|
||||
<!-- Multiple File Upload -->
|
||||
<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
|
||||
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>
|
||||
|
@ -50,19 +52,31 @@ class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg curs
|
|||
<!-- Latitude -->
|
||||
<div>
|
||||
<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"
|
||||
placeholder="Latitude" required />
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Longitude -->
|
||||
<div>
|
||||
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">longitude</label>
|
||||
<input type="text" id="longitude" name="longitude"
|
||||
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">Longitude</label>
|
||||
<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"
|
||||
placeholder="longitude"/>
|
||||
placeholder="Longitude" />
|
||||
</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 -->
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
<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>
|
||||
<!-- 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>
|
||||
|
||||
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
<x-adminlayout>
|
||||
|
||||
<div class="container">
|
||||
<div class="py-10">
|
||||
|
||||
<div class="pb-4 flex">
|
||||
|
||||
<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"
|
||||
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
|
||||
href="{{ route('admin.dataKursus') }}">
|
||||
<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"
|
||||
d="M13 5H1m0 0 4 4M1 5l4-4" />
|
||||
</svg></a>
|
||||
</svg>
|
||||
</a>
|
||||
</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
|
||||
@method('PUT') <!-- Add this if you are updating an existing resource -->
|
||||
<div class="grid gap-6 mb-6 md:grid-cols-2">
|
||||
|
||||
<!-- Nama Kursus -->
|
||||
<div>
|
||||
<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"
|
||||
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"
|
||||
placeholder="Kampung Inggris LC - Language Center" required />
|
||||
</div>
|
||||
|
@ -27,36 +29,40 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
|
|||
<!-- File Upload -->
|
||||
<div>
|
||||
<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
|
||||
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">
|
||||
<div class="ml-2 p-0">
|
||||
<div class="ml-2">
|
||||
<!-- Modal toggle -->
|
||||
<button data-modal-target="default-modal" data-modal-toggle="default-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 "
|
||||
<button data-modal-target="file-upload-modal" data-modal-toggle="file-upload-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
|
||||
Detail
|
||||
</button>
|
||||
|
||||
<!-- Main modal -->
|
||||
<div id="default-modal" tabindex="-1" aria-hidden="true"
|
||||
<!-- File Upload Modal -->
|
||||
<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">
|
||||
<div class="relative p-4 w-full max-w-2xl max-h-full">
|
||||
<!-- Modal content -->
|
||||
|
||||
<div
|
||||
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>
|
||||
|
||||
<!-- Deskripsi -->
|
||||
<div>
|
||||
<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"
|
||||
placeholder="KAMPUNG INGGRIS LC – LANGUAGE CENTER Adalah . . . ." required />
|
||||
</div>
|
||||
|
@ -65,32 +71,60 @@ class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:
|
|||
<div>
|
||||
<label for="multiple_files" class="block mb-2 text-sm font-medium text-gray-900">Upload Multiple
|
||||
Files</label>
|
||||
<div class="flex items-center">
|
||||
<input
|
||||
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>
|
||||
<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>
|
||||
|
||||
<!-- Latitude -->
|
||||
<div>
|
||||
<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"
|
||||
placeholder="Latitude" required />
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Longitude -->
|
||||
<div>
|
||||
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">longitude</label>
|
||||
<input type="text" id="longitude" name="longitude"
|
||||
<label for="longitude" class="block mb-2 text-sm font-medium text-gray-900">Longitude</label>
|
||||
<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"
|
||||
placeholder="longitude" />
|
||||
placeholder="Longitude" />
|
||||
</div>
|
||||
|
||||
<!-- Paket -->
|
||||
<div>
|
||||
<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"
|
||||
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>
|
||||
|
@ -99,7 +133,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
|
|||
<!-- Metode -->
|
||||
<div>
|
||||
<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"
|
||||
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>
|
||||
|
@ -108,7 +143,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
|
|||
<!-- Fasilitas -->
|
||||
<div>
|
||||
<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"
|
||||
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>
|
||||
|
@ -117,7 +153,8 @@ class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border bor
|
|||
<!-- Lokasi -->
|
||||
<div>
|
||||
<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"
|
||||
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>
|
||||
|
@ -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"
|
||||
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>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@push('script')
|
||||
<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>
|
||||
@endpush
|
||||
|
||||
|
||||
</x-adminlayout>
|
||||
|
|
|
@ -17,25 +17,28 @@ class="self-center pt-6 text-4xl text-white font-semibold whitespace-nowrap aclo
|
|||
<div>
|
||||
<h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Resources
|
||||
</h2>
|
||||
<ul class="text-gray-600 font-medium">
|
||||
<li class="mb-4">
|
||||
<a href="https://flowbite.com/" class="hover:underline">Flowbite</a>
|
||||
<ul class="text-gray-600 font-medium space-y-4">
|
||||
<li class="">
|
||||
<a href="/beranda" class="hover:underline">Beranda</a>
|
||||
</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>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase">Follow us
|
||||
</h2>
|
||||
<ul class="text-gray-600 font-medium">
|
||||
<li class="mb-4">
|
||||
<a href="https://github.com/themesberg/flowbite"
|
||||
<ul class="text-gray-600 font-medium space-y-4">
|
||||
<li class="">
|
||||
<a href="#"
|
||||
class="hover:underline ">Github</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://discord.gg/4eeurUVvTy" class="hover:underline">Discord</a>
|
||||
<a href="#" class="hover:underline">Discord</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -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">
|
||||
|
||||
<li class="">
|
||||
<a href="{{ route('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 ">
|
||||
<a href="{{ route('user.home') }}"
|
||||
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
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -36,7 +36,7 @@ class="{{ request()->is('admin/data-kursus','admin/tambahdata') ? 'bg-[#EBFEA1]
|
|||
<form method="POST" action="{{ route('logout') }}">
|
||||
@csrf
|
||||
<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
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
@ -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">
|
||||
@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="#">
|
||||
<img class="rounded-lg m-auto flex justify-center items-center w-full max-h-64 object-cover"
|
||||
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">
|
||||
{{ Str::words($landingpage->deskripsi, 30, '...') }}
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<div class="flex items-center">
|
||||
<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">
|
||||
|
@ -67,9 +64,6 @@ class="mb-2 text-2xl poppins-regular font-extrabold tracking-tight text-gray-90
|
|||
<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" />
|
||||
</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 class="flex justify-end">
|
||||
<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 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>
|
||||
|
|
|
@ -1,20 +1,19 @@
|
|||
<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">
|
||||
<p>Halaman ini berisi tentang kursus di Pare! </p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="flex justify-end py-4">
|
||||
<div class="flex space-x-2">
|
||||
<div class="flex">
|
||||
<div class="relative w-full">
|
||||
<form action="/kursus/search" method="GET">
|
||||
<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"
|
||||
placeholder="Pencarian Nama Kursus" required />
|
||||
<div type="submit"
|
||||
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]">
|
||||
placeholder="Pencarian Nama Kursus"/>
|
||||
<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]">
|
||||
<svg class="w-4 h-4" 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"
|
||||
|
@ -22,31 +21,29 @@ class="absolute top-0 end-0 p-2.5 text-sm font-medium h-full text-white bg-[#4F7
|
|||
</svg>
|
||||
<span class="sr-only">Search</span>
|
||||
</div>
|
||||
</form>
|
||||
</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)
|
||||
<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="#">
|
||||
<img class="rounded-lg m-auto w-full max-h-64 object-cover"
|
||||
src="{{ asset('storage/' . $kursus->img) }}" alt="{{ $kursus->nama_kursus }}" />
|
||||
</a>
|
||||
<div class="p-5">
|
||||
<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 }}
|
||||
</h5>
|
||||
</a>
|
||||
<p class="mb-3 font-normal poppins-regular text-gray-700">
|
||||
{{ Str::limit($kursus->deskripsi) }}
|
||||
{{ Str::limit($kursus->deskripsi, 200, '...') }}
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<div class="flex justify-end">
|
||||
<div class="flex justify-end mt-8">
|
||||
<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">
|
||||
Lihat
|
||||
|
@ -62,4 +59,28 @@ class="inline-flex items-center px-6 py-2 text-sm font-extrabold text-black ring
|
|||
@endforeach
|
||||
</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>
|
||||
|
|
|
@ -11,22 +11,20 @@
|
|||
// ADMIN
|
||||
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/edit-kursus', [AdminDataKursusController::class, 'edit'])->name('admin.edit'); // SHOW TAMPILAN EDIT DATA
|
||||
Route::post('/admin/store', [AdminDataKursusController::class, 'store'])->name('kursus.store'); // TOMBOL SIMPAN TAMBAH DATA
|
||||
Route::get('/admin/createData', [AdminDataKursusController::class, 'create'])->name('admin.create'); // SHOW TAMPILAN TAMBAH DATA
|
||||
Route::get('/admin/create-data', [AdminDataKursusController::class, 'create'])->name('admin.create'); // SHOW TAMBAH DATA
|
||||
Route::get('/admin/{id}/edit-kursus', [AdminDataKursusController::class, 'edit'])->name('admin.edit'); // SHOW EDIT 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::update('/admin/update/{id}', [AdminDataKursusController::class, 'update'])->name('update');
|
||||
Route::get('/admin/courses', [AdminDataKursusController::class, 'index']);
|
||||
|
||||
// LOGIN
|
||||
Route::get('/login', [LoginController::class, 'index'])->name('login');
|
||||
Route::get('/login', [LoginController::class, 'index'])->name('login'); // SHOW LOGIN
|
||||
|
||||
// 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/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('/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"
|
||||
|
|
|
@ -16,6 +16,15 @@ export default {
|
|||
},
|
||||
// Tambahkan opsi `center` untuk margin auto
|
||||
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: {},
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue