@php
$originalName = $product->name;
$foundImage = null;
// Path folder target gambar fisik
$dirPath = public_path('images');
if (is_dir($dirPath)) {
$filesInFolder = scandir($dirPath);
// Normalisasi teks pencarian produk (diubah ke lowercase & bersihkan spasi)
$searchClean = strtolower(str_replace(' ', '', $originalName)); // "dresspestasatin"
$words = explode(' ', strtolower(trim($originalName))); // ["dress", "pesta", "satin"]
foreach ($filesInFolder as $file) {
if ($file === '.' || $file === '..') continue;
$fileClean = strtolower(str_replace(' ', '', $file)); // "dresspestasatinmarun.jpg"
// Skenario 1: Jika nama produk tanpa spasi terkandung di dalam nama file gambar tanpa spasi
// Contoh: "dresspestasatin" ada di dalam "dresspestasatinmarun.jpg"
if (str_contains($fileClean, $searchClean)) {
$foundImage = asset('images/' . $file);
break;
}
// Skenario 2: Jika nama file tanpa spasi mengandung nama produk tanpa spasi (Kasus kebalikannya)
// Contoh: "jaketbomberarmy.jpg" dicari lewat kata kunci "jaketbomber"
if (isset($words[0], $words[1])) {
$twoWords = $words[0] . $words[1]; // "jaketbomber"
if (str_contains($fileClean, $twoWords)) {
$foundImage = asset('images/' . $file);
break;
}
}
// Skenario 3: Pengecekan multi-kata minimal 2 kata pertama cocok (Akurat untuk dress pesta / dress midi)
if (count($words) >= 2) {
if (str_contains($fileClean, $words[0]) && str_contains($fileClean, $words[1])) {
$foundImage = asset('images/' . $file);
break;
}
}
}
}
// Ambil gambar yang ditemukan, jika gagal total baru lempar ke generator teks placeholder
$src = $foundImage ?? 'https://placehold.co/400x300/e8e8e8/111111?text=' . urlencode($originalName);
@endphp
{{ $product->category->name ?? 'Tanpa kategori' }}
{{ $product->name }}
Ukuran: @if ($product->sizes->isNotEmpty()) @foreach ($product->sizes as $variant) {{ $variant->size }} @if($variant->stock > 0) ({{ $variant->stock }}) @endif @endforeach @else {{ $product->size ?? '-' }} @endif
Warna: {{ $product->color }}