Merhaba,
Bir kaç yol denedim ama daha sağlıklı bir sonuç alabilmek adına sizlere sormak istedim.
Tablom:
id - parent_id - title - description
Şeklinde.
Şöyle bir listeleme yapmaya çalışıyorum,
1- Bilgisayar
2- Bilgisayar > Ram
3- Bilgisayar > Hdd
4- Laptop
5- Laptop > Ekran
Gibi, zaman ayırıp yardımcı olabilecek arkadaşlara teşekkür ederim.
Alt kategorileri ana kategorilerin yanına yazma
3
●80
- 27-03-2020, 17:52:00Kurduğunuz tablo yapısı işinizi görecektir hocam.
Eğer çok fazla kategori olmayacaksatüm kategorileri çekip dizi olarak alabilirsiniz. Sonra php kısmında veya JS ile client tarafında listeletebilirsiniz.
Kategori sayısı çok fazla olacaksa ve alt kategoriler artacak ise ana katgeorileri listeletir, alt kategoriler talep edildiğinde JS ile request atıp DOM a basabilirsiniz. - 27-03-2020, 21:07:06
$kategori1 = 'SELECT * FROM kategori ORDER BY kat_id DESC'; foreach ($kategori1 as $v) { $kategori2 = 'SELECT * FROM kategori WHERE parent_id = "{$v->kat_id}" ORDER BY kat_id DESC'; foreach ($kategori2 as $vl) { echo '<option value="'.$vl->kat_id.'">'.$v->anaKategori.' > '.$vl->subKategori.'</option>'; } }Yukarıda ki kod bloğu dener misin rica etsem yani tam olarak nasıl bir yapı kullandığını bilemediğim için örnek olsun diye yazdım bunu hızlıca bir kontrol edersen işine yarayabilir tabi çok fazla ana kategori ve alt kategorin varsa bu yöntem yerine ana kategori sonrası jQuery - Ajax yardımıyla alt kategorileri çekmende fayda var. - 28-03-2020, 13:22:24Teşekkür ederim denedim ama farklı bir sonuç elde ettim. Benim denediklerimde sizinle aynı yöntemdi hemen hemen.DPA adlı üyeden alıntı: mesajı görüntüle
İstediğim kategori ağacı tam olarak Opencart admin panelinde ki kategori sistemi.
Örnek OC Kategori Ağacı
tam olarak bunun gibi yapmaya çalışıyorum fakat beceremedim.
Tablo yapım yukarıda belirttiğim gibi şöyle,
id - parent_id - title - description
Evet uğraştırdı biraz ama Opencat'tan devşirerek çözümledim.
İşine yarayacak arkadaşlar mutlaka olacaktır. Bu sebeple buraya bırakıyorum.
3 adet tablo gerekli,
1 - hizmet, 2- hizmet_detay, 3- hizmet_path
1- Hizmet tablosu
hizmet_id - parent_id - sort_order- status
2- Hizmet detay tablosu
hizmet_id - baslik - detay
3- hizmet_path tablosu
hizmet_id - path_id - level
3. Tablodan bahsedeyim. Level alanına 1 yazarsanız ana kategori, 0 yazarsanız alt kategori olarak değerlendiriyor ve alt kategorileri gruplayarak ana kategori yanına yazıyor.
örnek veri şöyle olmalı 3. tablo yapısına göre.
1-1-1
2-2-1
3-1-0
3-3-1
gibi.
SQL tarafı şöyle;
$results = $db->query(" SELECT cp.hizmet_id AS hizmet_id, GROUP_CONCAT( cd1.`baslik` ORDER BY cp.`level` SEPARATOR ' > ' ) AS `baslik`, c1.parent_id, c1.sort_order FROM `hizmet_path` cp LEFT JOIN `hizmet` c1 ON ( cp.hizmet_id = c1.hizmet_id ) LEFT JOIN `hizmet` c2 ON ( cp.path_id = c2.hizmet_id ) LEFT JOIN `hizmet_detay` cd1 ON ( cp.path_id = cd1.hizmet_id ) LEFT JOIN `hizmet_detay` cd2 ON ( cp.hizmet_id = cd2.hizmet_id ) GROUP BY cp.hizmet_id ORDER BY `baslik` ASC ");Array
foreach ($results as $result) { $categories[] = array( 'hizmet_id' => $result['hizmet_id'], 'baslik' => $result['baslik'], 'sort_order' => $result['sort_order'] ); }View tarafı
<table style="width: 100%;" id="example" class="table table-hover table-striped table-bordered"> <thead> <tr> <th>S.No</th> <th>Sayfa Başlık</th> <th>Sıra</th> <th class="text-center">işlem</th> </tr> </thead> <tbody> <?php if ($categories) { ?> <?php foreach ($categories as $category) { ?> <tr> <td class="text-left"><?php echo $category['hizmet_id']; ?></td> <td class="text-left"><?php echo $category['baslik']; ?></td> <td class="text-right"><?php echo $category['sort_order']; ?></td> <td class="text-right"><a href="" data-toggle="tooltip" title="#" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td> </tr> <?php } ?> <?php } else { ?> <tr> <td class="text-center" colspan="4"><?php echo $text_no_results; ?></td> </tr> <?php } ?> </tbody> </table>Umarım yararlı olmuştur.