• 27-03-2020, 17:13:28
    #1
    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.
  • 27-03-2020, 17:52:00
    #2
    Kurduğ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
    #3
    $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:24
    #4
    DPA adlı üyeden alıntı: mesajı görüntüle
    $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.
    Teşekkür ederim denedim ama farklı bir sonuç elde ettim. Benim denediklerimde sizinle aynı yöntemdi hemen hemen.
    İ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 '&nbsp;&nbsp;&gt;&nbsp;&nbsp;' ) 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.