• 15-11-2022, 22:14:07
    #10
    @bagimsiz;
    Panelimde kullandığım bir menu fonksiyonu var aşağı bırakıyorum işine yarayacağını düşünmekteyim.
    Gerekli alanları kendine göre düzenleyip bir dene
    <?php
    $query = $db->prepare('SELECT * FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
    $query->execute([
        't_c'   => 0
    ]);
    $cat_result = $query->fetchAll(PDO::FETCH_ASSOC);
    if ($query->rowCount()) :
        function subCategories($id)
        {
            $layer = '';
            global $db; 
            $query = $db->prepare('SELECT *  FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
            $query->execute([
                't_c'   => $id
            ]);
            $subcat_row = $query->fetchAll(PDO::FETCH_ASSOC);
            if ($query->rowCount()) {
                $layer .= '<ul class="submenu">';
                foreach ($subcat_row as $subCat) {  
                    $layer .= '<li><a href="'. $subCat['link'] . '">' .  $subCat['title'] . '</a>' . subCategories($subCat['menu_id']) . '</li>';
                }
                $layer .= '</ul>';
            }
            return $layer;
        }
        foreach ($cat_result as $mainCat) :  
    ?>
            <li> 
                <a <?= 'href="' . $mainCat['link']. '"' ?>>
                    <?= $mainCat['title'] ?>
                </a>
                <?= subCategories($mainCat['menu_id']); ?>
            </li>
    <?php
        endforeach;
    endif;
  • 15-11-2022, 22:18:18
    #11
    thealiyasar adlı üyeden alıntı: mesajı görüntüle
    @bagimsiz;
    Panelimde kullandığım bir menu fonksiyonu var aşağı bırakıyorum işine yarayacağını düşünmekteyim.
    Gerekli alanları kendine göre düzenleyip bir dene
    <?php
    $query = $db->prepare('SELECT * FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
    $query->execute([
        't_c'   => 0
    ]);
    $cat_result = $query->fetchAll(PDO::FETCH_ASSOC);
    if ($query->rowCount()) :
        function subCategories($id)
        {
            $layer = '';
            global $db;
            $query = $db->prepare('SELECT *  FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
            $query->execute([
                't_c'   => $id
            ]);
            $subcat_row = $query->fetchAll(PDO::FETCH_ASSOC);
            if ($query->rowCount()) {
                $layer .= '<ul class="submenu">';
                foreach ($subcat_row as $subCat) {  
                    $layer .= '<li><a href="'. $subCat['link'] . '">' .  $subCat['title'] . '</a>' . subCategories($subCat['menu_id']) . '</li>';
                }
                $layer .= '</ul>';
            }
            return $layer;
        }
        foreach ($cat_result as $mainCat) :  
    ?>
            <li>
                <a <?= 'href="' . $mainCat['link']. '"' ?>>
                    <?= $mainCat['title'] ?>
                </a>
                <?= subCategories($mainCat['menu_id']); ?>
            </li>
    <?php
        endforeach;
    endif;
    hocam bu ekrana basar. bana
    bir array lazım
    donenen değer array olmalı
  • 16-11-2022, 00:07:25
    #12
    problem çözüldüararkadaşlar teşekkür ederim katılan herkese
  • 16-11-2022, 00:15:28
    #13
    bagimsiz adlı üyeden alıntı: mesajı görüntüle
    Merhaba Arkadaşlar; 15 senedir yazılım geliştiriyorum böyle problem görmedim. şimdi bunu çözene anında 50 tl atacağım.
    Şu gördüğünüz tablodaki (adi birimler)listenin fonksiyonu yapılacak.
    bana oyle bir fonksiyon hazırlayın ki
    fonksiyona gönderdiğim değere göre alt id lerin arrayini oluştursun

    //////
    alt kategorileri olan menu sistemi
    kategori->alt_kategori->onun_altkategorisi....
    ////

    mesela
    liste(0) fonksiyonunu çağırdığımda
    0,ve parenti 0 olanlar ve onların alt kategorileri tek array içinde olsun
    örnekler
    liste(0)=array(0,1,2,3,4,5,6,7,8);
    liste(1)=array(1,2,3,4,5,7,8) (dikkat 6 yok, çünkü 6 nın parenti liste içinde yok )
    liste(2)=array(2,3,7,8)(2 ve parenti 2 olanlar ayrıca parenti 3 olanlar neden 3 çünkü 3'ün parenti2 )
    liste(3)=array(3,7,8)(3 ve parenti 3 olanlar);

    örnek fonksiyonu alta koyuyorum ama onu okumadan önce kendi fonksiyonununuz deneyin derim yoksa kafanız aynı yerde sıkışabilir benim gibi



    function liste($id,$arr=array()){
    $q=("select * from birimler where parent=$id);
    foreach($q as $value){
    array_push(arr,$value->id);
    liste($value->id,$arr);
    }
    return $arr;
    }
    $arr değerini referansla iletmeniz gerekirdi.

    function liste($id,&$arr=array()){
        $q=("select * from birimler where parent=$id);
        if ($q) {
            if (!in_array($id, $arr)) array_unshift($arr, $id);
            foreach($q as $value){
                array_push($arr,$value->id);
                liste($value->id,$arr);
            }
        }
        return $arr;
    }
  • 16-11-2022, 00:33:10
    #14
    ghergedan adlı üyeden alıntı: mesajı görüntüle
    $arr değerini referansla iletmeniz gerekirdi.

    function liste($id,&$arr=array()){
        $q=("select * from birimler where parent=$id);
        if ($q) {
            if (!in_array($id, $arr)) array_unshift($arr, $id);
            foreach($q as $value){
                array_push($arr,$value->id);
                liste($value->id,$arr);
            }
        }
        return $arr;
    }
    Çözümü bi arkadas iletti ama yarın bunu da deneyeceğim teşekkür ederim
  • 16-11-2022, 10:58:33
    #15
    ghergedan adlı üyeden alıntı: mesajı görüntüle
    $arr değerini referansla iletmeniz gerekirdi.

    function liste($id,&$arr=array()){
        $q=("select * from birimler where parent=$id);
        if ($q) {
            if (!in_array($id, $arr)) array_unshift($arr, $id);
            foreach($q as $value){
                array_push($arr,$value->id);
                liste($value->id,$arr);
            }
        }
        return $arr;
    }
    evet böyle de çalışıyor teşekkür ederim