• 19-01-2018, 13:44:40
    #1
    Başlık aslında her şeyi anlatıyor. Amacım veri tabanında bulunan dataları, alt kategori mantığında listelemek ama bu fonksiyonu bir türlü kuramadım. Bu konuda bana yardımcı olursanız çok ama çok sevinirim.

    Veri tabanım şu şekilde;
    Bu yapı zaten sürekli kullanılan bir yöntem yabancı gelmeyecek size, (parentid == 0 üst menü), (parentid == menu_id alt menü) olarak işlev görüyor.



    Yapmak istediğim buradaki üst menüleri ul içinde listelemek ve alt menüsü olan varsa "li" içinde bir "ul li" yapıp, liste içinde alt liste oluşturmak.
    İstediğim yapı


    Bunun için pdo'ya uygun bir fonksiyon lazım, aradım taradım bulamadım. Yardımcı olmak isteyenlere çok teşekkür ederim.
  • 19-01-2018, 13:57:19
    #2
    Menu tablonuz 1 tane mi baska tablonuz yokmu?
  • 19-01-2018, 14:01:43
    #3
    M_D_5 adlı üyeden alıntı: mesajı görüntüle
    Menu tablonuz 1 tane mi baska tablonuz yokmu?
    Evet 1 adet tablo üzerinden kontrol ediyorum. genelde izlediğim tüm videolar bu şekildeydi. Fakat onlar mysql fonksiyonları ile yaptıkları için pdo'ya uyarlayamadım bir türlü.
  • 19-01-2018, 14:09:05
    #4
    bulutaylak adlı üyeden alıntı: mesajı görüntüle
    Evet 1 adet tablo üzerinden kontrol ediyorum. genelde izlediğim tüm videolar bu şekildeydi. Fakat onlar mysql fonksiyonları ile yaptıkları için pdo'ya uyarlayamadım bir türlü.
    Sizin bu tabloyla yapmak istediginizi cok zor olur. Mesela menu name yazan yere hangi menunun adi yazılacak ana menu mu? Alt menu mu? Bence siz 2 ayri tablo yapın isiniz daha kolay olacaktir ve daha esnek olacaktir
  • 20-01-2018, 00:29:50
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    bu şekılde olması için 2 ayrı tablo olması lazım hocam. Tek tablo üzerinden olsa bile çok karışır. bi tabloda ana menüleri tutup diğer tabloda alt kategorileri tutarsanız daha iyi olacaktır.
  • 20-01-2018, 04:01:51
    #6
    bunun hazır fonksiyonu olmaz alt menüler için ayrı tablo yap ana menü veriyi çekerken alt menüsü varmı diye kontol et varsa ona göre css çagır ikinici bir sorgu ile alt menüleri getir umarım açıklayıcı olmuştur saygılar..
  • 20-01-2018, 11:26:58
    #7
    bulutaylak adlı üyeden alıntı: mesajı görüntüle
    Başlık aslında her şeyi anlatıyor. Amacım veri tabanında bulunan dataları, alt kategori mantığında listelemek ama bu fonksiyonu bir türlü kuramadım. Bu konuda bana yardımcı olursanız çok ama çok sevinirim.

    Veri tabanım şu şekilde;
    Bu yapı zaten sürekli kullanılan bir yöntem yabancı gelmeyecek size, (parentid == 0 üst menü), (parentid == menu_id alt menü) olarak işlev görüyor.



    Yapmak istediğim buradaki üst menüleri ul içinde listelemek ve alt menüsü olan varsa "li" içinde bir "ul li" yapıp, liste içinde alt liste oluşturmak.
    İstediğim yapı


    Bunun için pdo'ya uygun bir fonksiyon lazım, aradım taradım bulamadım. Yardımcı olmak isteyenlere çok teşekkür ederim.
    buyrun hocam

    <?php
    /* Mysql Bağlantısı*/
    try {
         $db = new PDO("mysql:host=localhost;dbname=yeni;charset=utf8", "root", "");
    } catch ( PDOException $e ){
         print $e->getMessage();
    }
    
    
    /*Gelen Listeyi Parçalama Fonksiyonu*/
    function Menuleri_Listele($MenulerArray , $parents = 0  , $parent_kat = 5 ,  $o = 0  ,  $menuler = NULL , $nested = FALSE ) 
    { 
        if( empty($MenulerArray) ){
            return;
        }
        if( !$nested ){
            foreach($MenulerArray as $row):
                $items[$row['menu_parentid']][]=$row;
            endforeach;
        }else{
            $items=$MenulerArray;
        }
        foreach( $items[$parents] as $sayfa ){
            $bosluk=str_repeat(' ',($o * $parent_kat));
            $menuler .= '<li><a href="#">'.$sayfa['menu_id'].' - '.$sayfa['menu_name'].'</a>'.PHP_EOL;
            if(isset($items[$sayfa['menu_id']])){
                $menuler .= '<ul>'.PHP_EOL;
                $menuler=Menuleri_Listele($items,$sayfa['menu_id'],$parent_kat,($o + 1),$menuler,TRUE);
                $menuler .= '</ul>'.PHP_EOL;
            }
    
            $menuler .= '</li>'.PHP_EOL;
        }
        return $menuler;
    }
    
    /* Veritabanından Tabloyu Çek Düzene Sok*/
    $o=0;
    $menu_listesi=array();
    $query = $db->query("SELECT * FROM menu ORDER BY menu_name ASC", PDO::FETCH_ASSOC);
    if ( $query->rowCount() ){
         foreach( $query as $row ){
    	$menu_listesi[$o]['menu_id']=$row['menu_id'];
        $menu_listesi[$o]['menu_name']=$row['menu_name'];
        $menu_listesi[$o]['menu_parentid']=$row['menu_parentid'];
        $o++;
         }
    }
    
    /* İşle */
    echo '<ul>'.Menuleri_Listele($menu_listesi).'</ul>'; 
    ?>
  • 20-01-2018, 12:50:51
    #8
    Arkadaşlar yardımcı olan herkese minnettarım. Dün gece büyük uğraşlar sonunda bir fonksiyon yazabildim. Tüm dataları başarılı bir şekilde çektim, şuan stilleri ile uğraşıyorum. Kodumuzu da buraya ekleyelim, ihtiyacı olanlar faydalansın.

    <?php include('head.php'); ?>
    <?php
    function categories_table($id = 0, $string = 0) {
    global $db;
    $categories = $db->prepare("SELECT * from menu where menu_parentId= :id"); $categories->bindParam(':id', $id, PDO::PARAM_INT);
    $categories->execute();
    $totalRowCat = $categories->rowCount();
    if(0 < $totalRowCat):
    echo "<ul>";
    foreach($categories as $category): ?>
    <li>
    <a href="#"><?php echo $category['menu_name']; categories_table($category["menu_id"], $string+5); ?>
    </a>
    </li> <?php endforeach; echo "</ul>"; endif; }
    ?>
    
    <div class="col-sm-12 menu"> <?php categories_table(); ?> </div>
    Şuan $string değişkeni bir işlev görmüyor onunla da bir takım şeyler yapmayı düşünüyorum. Dataların ekran görüntüsü aşağıdadır.
    Liste baya uzun anca bu kadarını gösterebildim. Amacım bunu bootstrap menüye entegre etmek, bakalım sonucu ne olacak.