• 03-09-2016, 00:35:32
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba arkadaşlar,

    Bootstrap menü sistemini veritabanı üzerinden kullanmak istiyorum. Fakat bir türlü mantığı oturtamadım. Tablo ve yazdığım kodları ekliyorum. Yardımcı olabilirseniz sevinirim.

    Şimdiden teşekkürler.



    	function menuler($id = 0, $string = 0)
    	{
    		
    		global $db;
    
    		$menuIcerik	= $db->prepare("SELECT * FROM panel_menu_menuler WHERE ust_menu_id = ? ORDER BY link_sira ASC");
    		$menuIcerik->bind_param("s",$id);
    		$menuIcerik->execute();
    		$menuIcerikSonuc = $menuIcerik->get_result();
    			
    		
    		if(mysqli_affected_rows($db)){
    
    			while($menu = $menuIcerikSonuc->fetch_object() ){
    				
    				echo '<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$menu->link_adi.'<span class="caret"></span></a>';
    			
    				echo '<ul class="dropdown-menu">';
    				menuler($menu->id, $string + 2);
    				echo '</ul></li>';
    			}
    			
    		}else{
    			
    			return false;
    
    		}
    		
    	}
  • 03-09-2016, 03:12:02
    #2
    Merhaba,

    Gönderdiğin Tablo yapısı ve kod yapısına uyarak düzenlemeler yaptım, string değerini nereye gönderdiğini kullanmadığını fark etmiş olsam da, başka şekilde değerlendireceğini düşündüm için o bölüme pek dokunmadım. Umarım çalışır, test etme şansım olmadı. İyi çalışmalar.


       function menuler($id = 0, $string = 0) 
        { 
            global $db; 
            $menuIcerik    = $db->prepare("SELECT * FROM panel_menu_menuler WHERE ust_menu_id = ? ORDER BY link_sira ASC"); 
            $menuIcerik->bind_param("s",$id);
            $menuIcerik->execute(); 
            $menuIcerikSonuc = $menuIcerik->get_result(); 
    
            $returnItem = false;
            /*
             returnItem degeri ön tanımlı olarak false veriliyor, eğer if sorgusu içerisine girmez ise, otomatik olarak false dönecektir, eğer girer ise doğal olarak html değerini dönecektir. 
            */
            if($menuIcerikSonuc->num_rows > 0){
                while($menu = $menuIcerikSonuc->fetch_assoc()){
                    $returnItem .= '<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$menu->link_adi.'<span class="caret"></span></a>'; 
                    /*
                        Ana kategori olmasına göre, sub içeriği veriyor bu durumu kendine göre database üzerinden yada kod yordamıyla ayarlayabilirsin. Gönderdiğin ekran görüntüsünü baz olarak bu şekilde düzenledim.
                    */
                    if($menu["ust_menu_id"] === 0){
                        $getSubs = menuler($menu->id, $string + 2);
                        if($getSubs !== false){
                            $returnItem .= '<ul class="dropdown-menu">'; 
                            $returnItem .= $getSubs; 
                            $returnItem .= '</ul>'; 
                        }
                    }
                    $returnItem .= '</li>';
                }
            }
            return $returnItem;
        }
  • 03-09-2016, 13:35:27
    #3
    Cevabınız ve yardımınız için teşekkür ederim. Kod bu haliyle hata çıktısı verdi. fetch_assoc()'u fetch_object() olarak ve haliyle $menu["ust_menu_id"] bunuda $menu->ust_menu_id olarak değiştirdim. Fonksiyonu echo ile ekrana yazdırdığımda ana kategoriler yani ust_menu_id'si 0'a eşit olan anasayfa, hakkımızda ve hizmet alanımız başlıklarını çıktı verdi. Fakat alt başlıkları görüntülemedi. Çıktı kodunu aşağıda yazıyorum.

    <ul class="nav navbar-nav navbar-left">
    					
    <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Ana Sayfa<span class="caret"></span></a>
    </li>
    
    <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Hakkımızda<span class="caret"></span></a>
    </li>
    
    <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Hizmet Alanımız<span class="caret"></span></a>
    </li>
    
    </ul>
  • 03-09-2016, 14:16:17
    #4
    Merhaba,

    Şu bölümü "if($menu["ust_menu_id"] === 0){", şöyle "if($menu["ust_menu_id"] == '0'){" denediniz mi ?

    Saygılarımla.
  • 03-09-2016, 16:22:04
    #5
    Teşekkürler bu şekilde çalıştı. Peki sonsuz derinlikte menüleri nasıl listeletebiliriz. "Hakkımızda->Çalışanlarımız->X Kişisi" x kişisininin ust_menu_id'sini çalışanlarımızın id'sini yaptığımda listelemiyor
  • 03-09-2016, 18:29:30
    #6
    MrNone adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler bu şekilde çalıştı. Peki sonsuz derinlikte menüleri nasıl listeletebiliriz. "Hakkımızda->Çalışanlarımız->X Kişisi" x kişisininin ust_menu_id'sini çalışanlarımızın id'sini yaptığımda listelemiyor
    Merhaba,

    Onun yapısı daha farklı olacaktır, onun için de tablona ust_menu diye bir field açıp, altında sub değeri olan menülere 1 değeri atarsan ve if bölümünü "if($menu["ust_menu"] == '1'){" şu şekilde ayarlarsan düzgün bir şekilde çalışacaktır başka bir değişiklik yapmana gerek yok.

    Ek olarak hiç field açmayayım ama sorgu ile işi çözeyim dersen, bahsettiğimiz if bölümünü kaldırırsan (sadece if ve endif bölümü) $getSubs ifi zaten alt menü var mı diye kontrol ediyor, bu şekilde de sonsuz döngüye ulaşabilirsin.

    Saygılarımla.
  • 03-09-2016, 22:33:37
    #7
    Alan açmadan koşulu kaldırdım fakat tekrar etmedi.

    trdeveloper adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Onun yapısı daha farklı olacaktır, onun için de tablona ust_menu diye bir field açıp, altında sub değeri olan menülere 1 değeri atarsan ve if bölümünü "if($menu["ust_menu"] == '1'){" şu şekilde ayarlarsan düzgün bir şekilde çalışacaktır başka bir değişiklik yapmana gerek yok.

    Ek olarak hiç field açmayayım ama sorgu ile işi çözeyim dersen, bahsettiğimiz if bölümünü kaldırırsan (sadece if ve endif bölümü) $getSubs ifi zaten alt menü var mı diye kontrol ediyor, bu şekilde de sonsuz döngüye ulaşabilirsin.

    Saygılarımla.
  • 04-09-2016, 01:00:00
    #8
    MrNone adlı üyeden alıntı: mesajı görüntüle
    Alan açmadan koşulu kaldırdım fakat tekrar etmedi.
    Kodun son halini paylaşırsan yardımcı olmaya çalışayım.
  • 04-09-2016, 01:32:23
    #9
    	function menuler($id = 0, $string = 0)  
        {  
            global $db; 
    		
            $menuIcerik    = $db->prepare("SELECT * FROM panel_menu_menuler WHERE ust_menu_id = ? ORDER BY link_sira ASC");  
            $menuIcerik->bind_param("s",$id); 
            $menuIcerik->execute();  
            $menuIcerikSonuc = $menuIcerik->get_result();  
    
            $returnItem = false; 
            /* 
             returnItem degeri ön tanımlı olarak false veriliyor, eğer if sorgusu içerisine girmez ise, otomatik olarak false dönecektir, eğer girer ise doğal olarak html değerini dönecektir.  
            */ 
            if($menuIcerikSonuc->num_rows > 0){ 
                while($menu = $menuIcerikSonuc->fetch_object()){
    
    				$returnItem .= '<li class="dropdown"><a href="'.$menu->link.'" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$menu->link_adi.'</a>';  
      
    				/* 
                        Ana kategori olmasına göre, sub içeriği veriyor bu durumu kendine göre database üzerinden yada kod yordamıyla ayarlayabilirsin. Gönderdiğin ekran görüntüsünü baz olarak bu şekilde düzenledim. 
                    */ 
                  
                        $getSubs = menuler($menu->id, $string + 2); 
                        if($getSubs !== false){ 
                            $returnItem .= '<ul class="dropdown-menu">';  
                            $returnItem .= $getSubs;  
                            $returnItem .= '</ul>';  
                        }
                     
                    $returnItem .= '</li>'; 
                } 
            } 
            return $returnItem; 
        }


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 01:32:23 -->-> Daha önceki mesaj 01:05:18 --

    trdeveloper adlı üyeden alıntı: mesajı görüntüle
    Kodun son halini paylaşırsan yardımcı olmaya çalışayım.
    function menuler($id = 0, $string = 0)* 
    *{* 
    *****global $db; 
    ****
    *****$menuIcerik*** = $db->prepare("SELECT * FROM panel_menu_menuler WHERE ust_menu_id = ? ORDER BY link_sira ASC");* 
    *****$menuIcerik->bind_param("s",$id); 
    *****$menuIcerik->execute();* 
    *****$menuIcerikSonuc = $menuIcerik->get_result();* 
    *
    *****$returnItem = false; 
    *****/* 
    ******returnItem degeri ön tanımlı olarak false veriliyor, eğer if sorgusu içerisine girmez ise, otomatik olarak false dönecektir, eğer girer ise doğal olarak html değerini dönecektir.* 
    ******/
    *****if($menuIcerikSonuc->num_rows > 0){ 
    *********while($menu = $menuIcerikSonuc->fetch_object()){
    *
    *********$returnItem .= '<li class="dropdown"><a href="'.$menu->link.'" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'.$menu->link_adi.'</a>';* 
    *
    *********/* 
    *****************Ana kategori olmasına göre, sub içeriği veriyor bu durumu kendine göre database üzerinden yada kod yordamıyla ayarlayabilirsin. Gönderdiğin ekran görüntüsünü baz olarak bu şekilde düzenledim. 
    **************/
    ************
    *****************$getSubs = menuler($menu->id, $string + 2); 
    *****************if($getSubs !== false){ 
    *********************$returnItem .= '<ul class="dropdown-menu">';* 
    *********************$returnItem .= $getSubs;* 
    *********************$returnItem .= '</ul>';* 
    *****************}
    ***************
    *************$returnItem .= '</li>'; 
    *********} 
    *****} 
    *****return $returnItem; 
    *}