Merhabalar,
Laravel'de alt üst kategori mantığını çalıştırıyorum kategori altına sınırsız kategori açabiliyorum.
Ama listelerken malesef düzenli listeleyemiyorum.
Araba
-> Mercedes
--> C180
--> C200
-> Mitsubishi
--> Lancer
---> 1.6
---> 1.8
--> Evolution
-> Toyota
--> Avensis
---> 2.0
Mobilya...
Gibi düzenli gitmesini istiyorum. Tek seferde çözünce her alanda kullanılabilir örnek açılır menülerde, ürün kategorisi arka tarafta seçilirken v.s.
Öncelikle kendi bulduğum çözümü açıklayayım. Çünkü forumda benim gibi ihtiyaç duyanlar olacaktır. Tabi bu kodlar bana ait değil kopyala yapıştır boz düzelt bir şekilde oturttum. Çalışıyor.
Kategorileri Listeleme Sayfası
Yeni Kategori Oluşturma Sayfası (Burada düzgün çalışıyor ama farklı alanlarda buradaki kodları kullanamıyorum)
Oluşturulan Kategoriyi Düzenleme Sayfası (Burada yapamadım )
Ürünü Kategoriye Ekleme Alanı (Burada'da düzgün. Ama tabiki ürünü düzenlerken böyle olmuyor)
Detaylar ;
Veri tabanında kategorileri 'ust_id' olarak kaydediyorum. 'ust_id' = null ise ana kategori olarak görüyor.
Altına kategori ekleyince 'ust_id' seçilen kategori oluyor.
Kategori Oluştur Controller
public function olustur($id = 0)
{
$data = new UrunKategori;
$urun_kategoriler = UrunKategori::all();
$ustkategorisec = UrunKategori::whereNull('ust_id')->with('altKategori')->get();
$tumkategoriler = $data->urunKategoriler()->get();
return view('SS.eticaret.kategori.olustur', compact('data', 'urun_kategoriler','ustkategorisec','tumkategoriler'));
}
Kategori Model'i
public function urunKategoriler()
{
return $this->belongsToMany(Urun::class, 'urun_kategori_s');
}
public function altKategori()
{
return $this->hasMany(UrunKategori::class, 'ust_id', 'id');
}
public function ustKategori() {
return $this->belongsTo(UrunKategori::class, 'ust_id')->withDefault([
'kategori_adi' => 'Ana Kategori'
]);
}
Kategori Oluştur View'i Olay burada karışmaya başlıyor...
@foreach ($ustkategorisec as $kt)
<option class="font-weight-bold" value="{{ $kt->id }}" {{ collect(old('ust_id', $tumkategoriler))->contains($kt->id) ? 'selected': '' }} >{{ $kt->kategori_adi }}</option>
@if (count($kt->altKategori) > 0)
@include('SS.eticaret.kategori.altkategori', ['kategorialt' => $kt->altKategori, 'ustkategori' => $kt->kategori_adi])
@endif
@endforeach
**Foreach için oluşturulmuş alt kategori view'i **
@foreach ($kategorialt as $ktalt)
<option value="{{ $ktalt->id }}" {{ collect(old('ust_id', $tumkategoriler))->contains($ktalt->id) ? 'selected': '' }}>{{ $ustkategori}} > {{ $ktalt->kategori_adi }}</option>
@if (count($ktalt->altKategori) > 0)
@php
$ustkategoriler = $ustkategori . ' > ' . $ktalt->kategori_adi;
@endphp
@include('SS.eticaret.kategori.altkategori', ['kategorialt' => $ktalt->altKategori, 'ustkategori' => $ustkategoriler])
@endif
@endforeach
**Kategori Düzenle View'i **
@foreach($urun_kategoriler as $kategori)
<option value="{{ $kategori->id }}" {{ $kategori->id == old('ust_id', $data->ust_id) ? 'selected' : '' }}>{{ $kategori->kategori_adi }}</option>
@endforeach
Dediğim gibi bu kategori mantığını henüz backend için hazırladım. Front end de header'da menüler'de kullanacağım. Bunun dışında ürün filtreleme için kullanılacak gibi gibi alanlarda çalışacak.
Anlatım karma karışık olmuş olabilir ama destek verebilecekler varsa şimdiden çok teşekkür ederim..
Birde örnek olarak kategorilerin listelendiği sayfada nasıl yapılabilir?
<table>
<thead>
<tr>
<th>Üst Kategori</th>
<th>Kategori Adı</th>
</tr>
</thead>
<tbody>
@foreach ($kategori_listesi as $kategori)
<tr id="item-{{ $kategori->id }}">
<td>{{ $kategori->ustKategori->kategori_adi }}</td>
<td>{{ $kategori->kategori_adi }}</td>
<td>{{ $kategori->siralama }}</td>
</tr>
@endforeach
</tbody>
</table>