• 02-01-2022, 12:52:38
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.








    Merhaba,

    Yukarıdaki gibi bir sınırsız katagori tablom var. Bu katagorileri aşağıdaki kodları kullanarak aşağıdaki gibi listeleyebiliyorum. Örneğin Posttan aksesuar id si geldiğinde aksesuara bağlı tüm alt katagorilerin ve onların alt katagorilerinin adını veya id lerini bir diziye veya ayrı ayrı değişkenlere atamak istiyorum. Bunu nasıl yapabilirim.

    $katagori_listesi = $baglan->query("SELECT * FROM katagoriler", PDO::FETCH_OBJ)->fetchAll();
    
    function buildTree($elements, $parentId =0){
      
        $branch = array();
        
        foreach ($elements as $element){
            
            if ($element->parent_id == $parentId){
                
                $children = buildTree($elements, $element->id);
                
                if($children){
                    $element->children = $children;
                    
                }else{
                    
                    $element->children = array();
                }
                
                $branch[] = $element;
                
            }
              
        }
        
        return $branch;
    }
    
    
    function drawElements($items){
        
        echo "<ul>";
        
        foreach ($items as $item){
            
            echo "<li>$item->title</li>";
            
            if(sizeof($item->children) > 0){
                
                drawElements($item->children);
            }
        }
        
        echo "</ul>";
    }
    
    drawElements(buildTree($katagori_listesi));


    Bunu yapabilmek için ilk fonksiyona parent_id olarak 1 verdim ve ikinci fonksiyonu aşağıdaki gibi uyarladım. Ancak ana katagorileri gösteriyor paspasa ait alt katagorileri göstermiyor.

    function alt_katagoriler($icerik){
        
        $alt=array();
        
        foreach ($icerik as $item) {
        
            $title = $item->title;
          
            array_push($alt,$title);
            
            
        if(sizeof($item->children) > 0){
                
                alt_katagoriler($item->children);
                
                
        }
     }
     return $alt;
    }        
    
    print_r(alt_katagoriler(buildTreeS($katagori_listesi)));
    Yukarıdaki fonksiyorunun çıktısı: Array ( [0] => Paspas [1] => Bagaj Havuzu )
  • 02-01-2022, 18:02:55
    #2
    Alttaki şu kısmı neden yazdığınızı anlamadım. Zaten buildTree ve drawElements verdiğiniz ekran görüntüsünü sağlıyor.
    Deeptrace adlı üyeden alıntı: mesajı görüntüle
    function alt_katagoriler($icerik){
        $alt=array();
        foreach ($icerik as $item) {
            $title = $item->title;
            array_push($alt,$title);
            if(sizeof($item->children) > 0){
                    alt_katagoriler($item->children);
            }
        }
        return $alt;
    }        
    print_r(alt_katagoriler(buildTreeS($katagori_listesi)));
    Yukarıdaki fonksiyorunun çıktısı: Array ( [0] => Paspas [1] => Bagaj Havuzu )
  • 02-01-2022, 18:29:03
    #3
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Alttaki şu kısmı neden yazdığınızı anlamadım. Zaten buildTree ve drawElements verdiğiniz ekran görüntüsünü sağlıyor.
    Bu kısmı sadece bir katagoriye bağlı olan(örneğin Aksesaur) tüm alt katagorilerin ismini elde etmek için yazdım ancak istediğim gibi çalışmıyor. Nerede hata yaptığımı da bulamıyorum.

    Elde etmeyi amaçladığım çıktı şu şekilde olmalıydı: Array ( [0] => Paspas [1] => 3D Paspas [2] => Halı Paspas [3] =>Bagaj Havuzu )

    Elde ettiğim çıktı : Array ( [0] => Paspas [1] => Bagaj Havuzu )
  • 02-01-2022, 19:00:58
    #4
    Deeptrace adlı üyeden alıntı: mesajı görüntüle








    Merhaba,

    Yukarıdaki gibi bir sınırsız katagori tablom var. Bu katagorileri aşağıdaki kodları kullanarak aşağıdaki gibi listeleyebiliyorum. Örneğin Posttan aksesuar id si geldiğinde aksesuara bağlı tüm alt katagorilerin ve onların alt katagorilerinin adını veya id lerini bir diziye veya ayrı ayrı değişkenlere atamak istiyorum. Bunu nasıl yapabilirim.

    $katagori_listesi = $baglan->query("SELECT * FROM katagoriler", PDO::FETCH_OBJ)->fetchAll();
    
    function buildTree($elements, $parentId =0){
      
        $branch = array();
        
        foreach ($elements as $element){
            
            if ($element->parent_id == $parentId){
                
                $children = buildTree($elements, $element->id);
                
                if($children){
                    $element->children = $children;
                    
                }else{
                    
                    $element->children = array();
                }
                
                $branch[] = $element;
                
            }
              
        }
        
        return $branch;
    }
    
    
    function drawElements($items){
        
        echo "<ul>";
        
        foreach ($items as $item){
            
            echo "<li>$item->title</li>";
            
            if(sizeof($item->children) > 0){
                
                drawElements($item->children);
            }
        }
        
        echo "</ul>";
    }
    
    drawElements(buildTree($katagori_listesi));


    Bunu yapabilmek için ilk fonksiyona parent_id olarak 1 verdim ve ikinci fonksiyonu aşağıdaki gibi uyarladım. Ancak ana katagorileri gösteriyor paspasa ait alt katagorileri göstermiyor.

    function alt_katagoriler($icerik){
        
        $alt=array();
        
        foreach ($icerik as $item) {
        
            $title = $item->title;
          
            array_push($alt,$title);
            
            
        if(sizeof($item->children) > 0){
                
                alt_katagoriler($item->children);
                
                
        }
     }
     return $alt;
    }        
    
    print_r(alt_katagoriler(buildTreeS($katagori_listesi)));
    Yukarıdaki fonksiyorunun çıktısı: Array ( [0] => Paspas [1] => Bagaj Havuzu )
    - Aşağıdaki örnekte sql sorgularını ve pdo kısmını kendinize göre editleyebilirsiniz.
    - getKategori() fonksiyonuna parametre olarak hangi kategori idyi verirseniz altındaki kategorileri ul-li şeklinde listeler, 0 verirseniz parent=0 olan en üst kategorilerden başlar
    - Eğer pdo değişkeninizi yani $baglan fonksiyon içinde görmezse fonksiyonun içinde $Sql in üstüne global $baglan; tanımı yapabilirsiniz.

    <?php
    function getKategori($parent)
    {
        $Sql = $db->query("Select id, baslik From kategoriler Where durum='1' And parent='$parent' Order By id Asc");
        $has_childs = false;
        while (list($kat_id, $baslik) = $db->fetchAll($Sql))
        {
            if ($has_childs === false)
            {
                $has_childs = true;
                $GLOBALS['Kategori'] .= '<ul>';
            }
            $GLOBALS['Kategori'] .= '
                <li>'.$baslik.'
            ';
            
            getKategori($kat_id);
            
            $GLOBALS['Kategori'] .= '</li>';
        }
        if ($has_childs === true)
        {
            $has_childs = false;
            $GLOBALS['Kategori'] .= "</ul>";
        }
        return $GLOBALS['Kategori'];
    }
    
    echo getKategori('0');
    ?>
  • 02-01-2022, 19:16:12
    #5
    Deeptrace adlı üyeden alıntı: mesajı görüntüle
    Bu kısmı sadece bir katagoriye bağlı olan(örneğin Aksesaur) tüm alt katagorilerin ismini elde etmek için yazdım ancak istediğim gibi çalışmıyor. Nerede hata yaptığımı da bulamıyorum.

    Elde etmeyi amaçladığım çıktı şu şekilde olmalıydı: Array ( [0] => Paspas [1] => 3D Paspas [2] => Halı Paspas [3] =>Bagaj Havuzu )

    Elde ettiğim çıktı : Array ( [0] => Paspas [1] => Bagaj Havuzu )
    Ekstra kod yazmanıza gerek yok. Sadece Aksesuar kategorisinin id sini ikinci parametre olarak verin yeterli.
    drawElements(buildTree($kategoriler, 1));
  • 02-01-2022, 21:08:31
    #6
    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    - Aşağıdaki örnekte sql sorgularını ve pdo kısmını kendinize göre editleyebilirsiniz.
    - getKategori() fonksiyonuna parametre olarak hangi kategori idyi verirseniz altındaki kategorileri ul-li şeklinde listeler, 0 verirseniz parent=0 olan en üst kategorilerden başlar
    - Eğer pdo değişkeninizi yani $baglan fonksiyon içinde görmezse fonksiyonun içinde $Sql in üstüne global $baglan; tanımı yapabilirsiniz.

    <?php
    function getKategori($parent)
    {
        $Sql = $db->query("Select id, baslik From kategoriler Where durum='1' And parent='$parent' Order By id Asc");
        $has_childs = false;
        while (list($kat_id, $baslik) = $db->fetchAll($Sql))
        {
            if ($has_childs === false)
            {
                $has_childs = true;
                $GLOBALS['Kategori'] .= '<ul>';
            }
            $GLOBALS['Kategori'] .= '
                <li>'.$baslik.'
            ';
            
            getKategori($kat_id);
            
            $GLOBALS['Kategori'] .= '</li>';
        }
        if ($has_childs === true)
        {
            $has_childs = false;
            $GLOBALS['Kategori'] .= "</ul>";
        }
        return $GLOBALS['Kategori'];
    }
    
    echo getKategori('0');
    ?>

      <?php
    function getKategori($parent)
    {
        global $baglan;
        
    
        $has_childs = false;
        
    
        
        while (list($kat_id, $baslik) = $baglan->query("SELECT * FROM katagoriler Where parent_id='$parent' Order By id Asc", PDO::FETCH_OBJ)->fetchAll())
        {
            if ($has_childs === false)
            {
                $has_childs = true;
                $GLOBALS['Kategori'] .= '<ul>';
            }
            $GLOBALS['Kategori'] .= '
                <li>'.$baslik.'
            ';
            
            getKategori($kat_id);
            
            $GLOBALS['Kategori'] .= '</li>';
        }
        if ($has_childs === true)
        {
            $has_childs = false;
            $GLOBALS['Kategori'] .= "</ul>";
        }
        return $GLOBALS['Kategori'];
    }
    
    
      
       echo getKategori('0');
        ?>
    Kodlarınızı yukarıdaki gibi kendi siteme uyarladım ancak $baslik değiskeninin oldugu satır için aşağıdaki hatayı veriyor.

    "Recoverable fatal error: Object of class stdClass could not be converted to string in ilanlar.php on line 19 "
  • 02-01-2022, 21:14:46
    #7
    yasarkemaldag adlı üyeden alıntı: mesajı görüntüle
    - Aşağıdaki örnekte sql sorgularını ve pdo kısmını kendinize göre editleyebilirsiniz.
    - getKategori() fonksiyonuna parametre olarak hangi kategori idyi verirseniz altındaki kategorileri ul-li şeklinde listeler, 0 verirseniz parent=0 olan en üst kategorilerden başlar
    - Eğer pdo değişkeninizi yani $baglan fonksiyon içinde görmezse fonksiyonun içinde $Sql in üstüne global $baglan; tanımı yapabilirsiniz.

    <?php
    function getKategori($parent)
    {
        $Sql = $db->query("Select id, baslik From kategoriler Where durum='1' And parent='$parent' Order By id Asc");
        $has_childs = false;
        while (list($kat_id, $baslik) = $db->fetchAll($Sql))
        {
            if ($has_childs === false)
            {
                $has_childs = true;
                $GLOBALS['Kategori'] .= '<ul>';
            }
            $GLOBALS['Kategori'] .= '
                <li>'.$baslik.'
            ';
            
            getKategori($kat_id);
            
            $GLOBALS['Kategori'] .= '</li>';
        }
        if ($has_childs === true)
        {
            $has_childs = false;
            $GLOBALS['Kategori'] .= "</ul>";
        }
        return $GLOBALS['Kategori'];
    }
    
    echo getKategori('0');
    ?>
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Ekstra kod yazmanıza gerek yok. Sadece Aksesuar kategorisinin id sini ikinci parametre olarak verin yeterli.
    drawElements(buildTree($kategoriler, 1));
    Söylediğiniz şekilde alt kategorileri listeleyerek ekrana yazıdırıyor, bunu yapabiliyorum. Ben ilgili alt kategorileri ayrı ayrı değişkenlere veya bir diziye atmak istiyorum.

    Bunu da bir bir kategoriye tıklandığında onun altındaki tüm kategorileri listeleyebilmek için yapmak istiyorum aslında.
  • 02-01-2022, 22:34:38
    #8
    Deeptrace adlı üyeden alıntı: mesajı görüntüle
    Söylediğiniz şekilde alt kategorileri listeleyerek ekrana yazıdırıyor, bunu yapabiliyorum. Ben ilgili alt kategorileri ayrı ayrı değişkenlere veya bir diziye atmak istiyorum.

    Bunu da bir bir kategoriye tıklandığında onun altındaki tüm kategorileri listeleyebilmek için yapmak istiyorum aslında.
    Bu sorununuzu çözer öyleyse:

    function getSubCategories($elements, $parentId = 0) {
    
        $branch = [];
        foreach($elements as $element) {
            if ($element->parent_id == $parentId) {
    
                $branch[] = $element;
                
                $children = getSubCategories($elements, $element->id);
                
                if($children)
                    $branch = array_merge($branch, $children);
                
            }
        }
        return $branch;
    
    }
  • 03-01-2022, 00:57:47
    #9
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Bu sorununuzu çözer öyleyse:

    function getSubCategories($elements, $parentId = 0) {
    
        $branch = [];
        foreach($elements as $element) {
            if ($element->parent_id == $parentId) {
    
                $branch[] = $element;
                
                $children = getSubCategories($elements, $element->id);
                
                if($children)
                    $branch = array_merge($branch, $children);
                
            }
        }
        return $branch;
    
    }
    Yazdığınız fonksiyon işe yaradı, 2 gündür bununla uğraşıyordum ama bir türlü çözememiştim. Çok teşekkür ederim